Description
Perform subpixel coregistration of two satellite image datasets using Fourier Shift Theorem proposed by Foroosh et al. 2002: Foroosh, H., Zerubia, J. B., & Berthod, M. (2002). Extension of phase correlation to subpixel registration. IEEE Transactions on Image Processing, 11(3), 188-199. doi:10.1109/83.988953); Python implementation by Daniel Scheffler (daniel.scheffler [at] gfz-potsdam [dot] de).
The program detects and corrects global X/Y-shifts between two input images in the subpixel scale, that are often present in satellite imagery. It does not correct scaling or rotation issues and will not apply any higher grade transformation. Therefore it will also not correct for shifts that are locally present in the input images.
Prerequisites and hints: The input images can have any GDAL compatible image format (http://www.gdal.org/formats_list.html). Both of them must be georeferenced. In case of ENVI files, this means they must have a 'map info' and a 'coordinate system string' as attributes of their header file. Different projection systems are currently not supported. The input images must have a geographic overlap but clipping them to same geographical extent is NOT neccessary. Please do not perform any spatial resampling of the input images before applying this algorithm. Any needed resampling of the data is done automatically. Thus the input images can have different spatial resolutions. The current algorithm will not perform any ortho-rectification. So please use ortho-rectified input data in order to prevent local shifts in the output image. By default the calculated subpixel-shifts are applied to the header file of the output image. No spatial resampling is done automatically as long as the both input images have the same projection. If you need the output image to be aligned to the reference image coordinate grid (by using an appropriate resampling algorithm), use the '-align_grids' option. The image overlap area is automatically calculated. Thereby no-data regions within the images are standardly respected. Providing the map coordinates of the actual data corners lets you save some calculation time, because in this case the automatic algorithm can be skipped. The no-data value of each image is automatically derived from the image corners. The verbose program mode gives some more output about the interim results, shows some figures and writes the used footprint and overlap polygons to disk. The figures must be manually closed in in order to continue the processing.
Install
For now, there is no automatic install script. Just clone the repository, install the dependencies and add the root directory of CoReg_Sat to your PATH environment variable.
CoReg_Sat has been tested with Python 3.5 and Python 2.7. It should be fully compatible to all Python versions above 2.7.
The following non-standard Python libraries are required:
- gdal, osr, ogr
- geopandas
- pykrige
- argparse
- shapely
- pyfftw is optional but will speed up calculation
- folium and geojson for some visualization functions
In addition clone the repository "py_tools_ds" and add its root directory to your PATH environment variable:
https://gitext.gfz-potsdam.de/danschef/py_tools_ds
Since py_tools_ds is not a public repository right now, contact Daniel Scheffler if you can not access it.
Modules
CoReg
This module calculates spatial shifts and performs a global correction (based on a single matching window).
Python Interface
calculate spatial shifts - with input data on disk
from CoReg_Sat import COREG
#im_reference = '/path/to/your/ref_image.bsq'
#im_target = '/path/to/your/tgt_image.bsq'
CR = COREG(im_reference, im_target, wp=(354223, 5805559), ws=(256,256))
CR.calculate_spatial_shifts()
Calculating actual data corner coordinates for reference image...
Corner coordinates of reference image:
[[319090.0, 5790510.0], [351800.0, 5899940.0], [409790.0, 5900040.0], [409790.0, 5790250.0], [319090.0, 5790250.0]]
Calculating actual data corner coordinates for image to be shifted...
Corner coordinates of image to be shifted:
[[319460.0, 5790510.0], [352270.0, 5900040.0], [409790.0, 5900040.0], [409790.0, 5790250.0], [319460.0, 5790250.0]]
Matching window position (X,Y): 354223/5805559
Detected integer shifts (X/Y): 0/-2
Detected subpixel shifts (X/Y): 0.357885632465/0.433837319984
Calculated total shifts in fft pixel units (X/Y): 0.357885632465/-1.56616268002
Calculated total shifts in reference pixel units (X/Y): 0.357885632465/-1.56616268002
Calculated total shifts in target pixel units (X/Y): 0.357885632465/-1.56616268002
Calculated map shifts (X,Y): 3.578856324660592 15.661626799963415
Original map info: ['UTM', 1, 1, 300000.0, 5900040.0, 10.0, 10.0, 33, 'North', 'WGS-84']
Updated map info: ['UTM', 1, 1, '300003.57885632466', '5900055.6616268', 10.0, 10.0, 33, 'North', 'WGS-84']
calculate spatial shifts - without any disk access
from py_tools_ds.ptds import GeoArray
from CoReg_Sat import COREG
im_reference = '/path/to/your/ref_image.bsq'
im_target = '/path/to/your/tgt_image.bsq'
# get a sample numpy array with corresponding geoinformation as reference image
geoArr = GeoArray(im_reference)
ref_ndarray = geoArr[:] # numpy.ndarray with shape (10980, 10980)
ref_gt = geoArr.geotransform # GDAL geotransform: (300000.0, 10.0, 0.0, 5900040.0, 0.0, -10.0)
ref_prj = geoArr.projection # projection as WKT string ('PROJCS["WGS 84 / UTM zone 33N....')
# get a sample numpy array with corresponding geoinformation as target image
geoArr = GeoArray(im_target)
tgt_ndarray = geoArr[:] # numpy.ndarray with shape (10980, 10980)
tgt_gt = geoArr.geotransform # GDAL geotransform: (300000.0, 10.0, 0.0, 5900040.0, 0.0, -10.0)
tgt_prj = geoArr.projection # projection as WKT string ('PROJCS["WGS 84 / UTM zone 33N....')
# pass an instance of GeoArray to COREG and calculate spatial shifts
geoArr_reference = GeoArray(ref_ndarray, ref_gt, ref_prj)
geoArr_target = GeoArray(tgt_ndarray, tgt_gt, tgt_prj)
CR = COREG(geoArr_reference, geoArr_target, wp=(354223, 5805559), ws=(256,256))
CR.calculate_spatial_shifts()
Calculating actual data corner coordinates for reference image...
Corner coordinates of reference image:
[[300000.0, 5848140.0], [409790.0, 5848140.0], [409790.0, 5790250.0], [300000.0, 5790250.0]]
Calculating actual data corner coordinates for image to be shifted...
Corner coordinates of image to be shifted:
[[300000.0, 5847770.0], [409790.0, 5847770.0], [409790.0, 5790250.0], [300000.0, 5790250.0]]
Matching window position (X,Y): 354223/5805559
Detected integer shifts (X/Y): 0/-2
Detected subpixel shifts (X/Y): 0.357885632465/0.433837319984
Calculated total shifts in fft pixel units (X/Y): 0.357885632465/-1.56616268002
Calculated total shifts in reference pixel units (X/Y): 0.357885632465/-1.56616268002
Calculated total shifts in target pixel units (X/Y): 0.357885632465/-1.56616268002
Calculated map shifts (X,Y): 3.578856324660592/15.661626799963415
Calculated absolute shift vector length in map units: 16.065328089207995
Calculated angle of shift vector in degrees from North: 192.8717191970359
Original map info: ['UTM', 1, 1, 300000.0, 5900040.0, 10.0, 10.0, 33, 'North', 'WGS-84']
Updated map info: ['UTM', 1, 1, '300003.57885632466', '5900055.6616268', 10.0, 10.0, 33, 'North', 'WGS-84']
'success'
correct shifts
CR.correct_shifts() returns an an OrderedDict containing the coregistered numpy array and its corresponding geoinformation.
CR.correct_shifts()
OrderedDict([('band', None),
('is shifted', True),
('is resampled', False),
('updated map info',
['UTM',
1,
1,
300003.57885632466,
5900025.6616268,
10.0,
10.0,
33,
'North',
'WGS-84']),
('updated geotransform',
[300000.0, 10.0, 0.0, 5900040.0, 0.0, -10.0]),
('updated projection',
'PROJCS["WGS 84 / UTM zone 33N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32633"]]'),
('arr_shifted', array([[ 0, 0, 0, ..., 953, 972, 1044],
[ 0, 0, 0, ..., 1001, 973, 1019],
[ 0, 0, 0, ..., 953, 985, 1020],
...,
[ 0, 0, 0, ..., 755, 763, 773],
[ 0, 0, 0, ..., 760, 763, 749],
[9999, 9999, 9999, ..., 9999, 9999, 9999]], dtype=uint16)),
('GeoArray_shifted',
<py_tools_ds.ptds.io.raster.GeoArray.GeoArray at 0x7f6c5a1cabe0>)])
To write the coregistered image to disk, the COREG class needs to be instanced with a filepath given to keyword 'path_out'. The output raster format can be any format supported by GDAL. Find a list of supported formats here: http://www.gdal.org/formats_list.html
apply detected shifts to multiple images
Sometimes it can be useful to apply the same shifts to multiple images - e.g. to different mask images derived from the same satellite dataset. For this purpose you can calculate spatial shifts using the COREG class (see above) and then apply the calculated shifts to mulitple images using the DESHIFTER class.
Take a look at the keyword arguments of the DESHIFTER class when you need further adjustments (e.g. output paths for the corrected images; aligned output grid, ...).
from CoReg_Sat import DESHIFTER
DESHIFTER(im_target1, CR.coreg_info).correct_shifts()
DESHIFTER(im_target2, CR.coreg_info).correct_shifts()
OrderedDict([('band', None),
('is shifted', True),
('is resampled', False),
('updated map info',
['UTM',
1,
1,
300003.57885632466,
5900025.6616268,
10.0,
10.0,
33,
'North',
'WGS-84']),
('updated geotransform',
[300000.0, 10.0, 0.0, 5900040.0, 0.0, -10.0]),
('updated projection',
'PROJCS["WGS 84 / UTM zone 33N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32633"]]'),
('arr_shifted', array([[ 0, 0, 0, ..., 953, 972, 1044],
[ 0, 0, 0, ..., 1001, 973, 1019],
[ 0, 0, 0, ..., 953, 985, 1020],
...,
[ 0, 0, 0, ..., 755, 763, 773],
[ 0, 0, 0, ..., 760, 763, 749],
[9999, 9999, 9999, ..., 9999, 9999, 9999]], dtype=uint16)),
('GeoArray_shifted',
<py_tools_ds.ptds.io.raster.GeoArray.GeoArray at 0x7f6c5a1caa58>)])
Shell console interface
The help instructions of the console interface can be accessed like this:
cd /path/to/CoReg_Sat/
python ./dsc__CoReg_Sat_FourierShiftTheorem.py -h
Follow these instructions to run CoReg_Sat from a shell console. For example, the most simple call would be like this:
python ./dsc__CoReg_Sat_FourierShiftTheorem.py /path/to/your/ref_image.bsq /path/to/your/tgt_image.bsq
CoReg_local
This module has been designed to detect and correct geometric shifts present locally in your input image. The class COREG_LOCAL calculates a grid of spatial shifts with points spread over the whole overlap area of the input images. Based on this grid a correction of local shifts can be performed.
Python interface
detect and correct local shifts - with input data on disk
from CoReg_Sat import COREG_LOCAL
im_reference = '/path/to/your/ref_image.bsq'
im_target = '/path/to/your/tgt_image.bsq'
kwargs = {
'grid_res' : 200,
'window_size' : (64,64),
'path_out' : 'auto',
'projectDir' : 'my_project',
'q' : False,
}
CRL = COREG_LOCAL(im_reference,im_target,**kwargs)
CRL.correct_shifts()
Calculating actual data corner coordinates for reference image...
Corner coordinates of reference image:
[[319090.0, 5790510.0], [351800.0, 5899940.0], [409790.0, 5900040.0], [409790.0, 5790250.0], [319090.0, 5790250.0]]
Calculating actual data corner coordinates for image to be shifted...
Corner coordinates of image to be shifted:
[[319460.0, 5790510.0], [352270.0, 5900040.0], [409790.0, 5900040.0], [409790.0, 5790250.0], [319460.0, 5790250.0]]
Matching window position (X,Y): 372220.10753674706/5841066.947109019
Calculating geometric quality grid (1977 points) in mode 'multiprocessing'...
progress: |==================================================| 100.0% [1977/1977] Complete 9.75 sek
Found 1144 valid GCPs.
Correcting geometric shifts...
Translating progress |==================================================| 100.0% Complete
Warping progress |==================================================| 100.0% Complete
Writing GeoArray of size (10979, 10979) to /home/gfz-fe/scheffler/jupyter/CoReg_Sat_jupyter/my_project/S2A_OPER_MSI_L1C_TL_SGS__20160608T153121_A005024_T33UUU_B03__shifted_to__S2A_OPER_MSI_L1C_TL_SGS__20160529T153631_A004881_T33UUU_B03.bsq.
OrderedDict([('band', None),
('is shifted', True),
('is resampled', True),
('updated map info',
['UTM',
1,
1,
300000.0,
5900030.0,
10.0,
10.0,
33,
'North',
'WGS-84']),
('updated geotransform',
[300000.0, 10.0, 0.0, 5900030.0, 0.0, -10.0]),
('updated projection',
'PROJCS["WGS 84 / UTM zone 33N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32633"]]'),
('arr_shifted', array([[ 0, 0, 0, ..., 1034, 996, 1001],
[ 0, 0, 0, ..., 1046, 1114, 1124],
[ 0, 0, 0, ..., 1021, 1126, 1148],
...,
[ 0, 0, 0, ..., 760, 769, 805],
[ 0, 0, 0, ..., 762, 755, 765],
[ 0, 0, 0, ..., 0, 0, 0]], dtype=uint16)),
('GeoArray_shifted',
<py_tools_ds.ptds.io.raster.GeoArray.GeoArray at 0x7f451ac14a90>)])
detect and correct local shifts - without any disk access
All you have to do is to instanciate COREG_LOCAL with two instances of the GeoArray class as described above.
CRL = COREG_LOCAL(GeoArray(ref_ndarray, ref_gt, ref_prj),GeoArray(tgt_ndarray, tgt_gt, tgt_prj),**kwargs)
CRL.correct_shifts()
visualize geometric quality grid with INITIAL shifts present in your input target image
Use the function COREG_LOCAL.view_CoRegPoints() to visualize the geometric quality grid with the calculated absolute lenghts of the shift vectors (the unit corresponds to the input projection - UTM in the shown example, thus the unit is 'meters'.).
NOTE: a calculation of reliable shifts above cloud covered areas is not possible. In the current version of CoReg_Sat these areas are not masked. A proper masking is planned.
%matplotlib inline
CRL.view_CoRegPoints(figsize=(15,15),backgroundIm='ref')
Note: array has been downsampled to 1000 x 1000 for faster visualization.
The output figure shows the calculated absolute lenghts of the shift vectors - in this case with shifts up to ~25 meters.
visualize geometric quality grid with shifts present AFTER shift correction
The remaining shifts after local correction can be calculated and visualized by instanciating COREG_LOCAL with the output path of the above instance of COREG_LOCAL.
CRL_after_corr = COREG_LOCAL(im_reference, CRL.path_out, **kwargs)
CRL_after_corr.view_CoRegPoints(figsize=(15,15),backgroundIm='ref')
Calculating actual data corner coordinates for reference image...
Corner coordinates of reference image:
[[319090.0, 5790510.0], [351800.0, 5899940.0], [409790.0, 5900040.0], [409790.0, 5790250.0], [319090.0, 5790250.0]]
Calculating actual data corner coordinates for image to be shifted...
Corner coordinates of image to be shifted:
[[319460.0, 5790540.0], [352270.0, 5900030.0], [409780.0, 5900030.0], [409780.0, 5790260.0], [322970.0, 5790250.0], [319460.0, 5790280.0]]
Matching window position (X,Y): 372216.38593955856/5841068.390957352
Note: array has been downsampled to 1000 x 1000 for faster visualization.
Calculating geometric quality grid (1977 points) in mode 'multiprocessing'...
progress: |==================================================| 100.0% [1977/1977] Complete 10.78 sek
The output figure shows a significant reduction of geometric shifts.
show the points table of the calculated geometric quality grid
NOTE: Point records where no valid match has been found are filled with -9999.
CRL.CoRegPoints_table
geometry | POINT_ID | X_IM | Y_IM | X_UTM | Y_UTM | X_WIN_SIZE | Y_WIN_SIZE | X_SHIFT_PX | Y_SHIFT_PX | X_SHIFT_M | Y_SHIFT_M | ABS_SHIFT | ANGLE | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | POINT (352000 5898040) | 81 | 5200 | 200 | 352000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
1 | POINT (354000 5898040) | 82 | 5400 | 200 | 354000.0 | 5898040.0 | 64 | 64 | 0.372470 | -0.285500 | 3.724704 | 2.855005 | 4.693024 | 232.529646 |
2 | POINT (356000 5898040) | 83 | 5600 | 200 | 356000.0 | 5898040.0 | 64 | 64 | 0.260948 | -0.293539 | 2.609479 | 2.935389 | 3.927580 | 221.636201 |
3 | POINT (358000 5898040) | 84 | 5800 | 200 | 358000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
4 | POINT (360000 5898040) | 85 | 6000 | 200 | 360000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
5 | POINT (362000 5898040) | 86 | 6200 | 200 | 362000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
6 | POINT (364000 5898040) | 87 | 6400 | 200 | 364000.0 | 5898040.0 | 64 | 64 | 0.141693 | 0.187036 | 1.416935 | -1.870360 | 2.346476 | 322.853405 |
7 | POINT (366000 5898040) | 88 | 6600 | 200 | 366000.0 | 5898040.0 | 64 | 64 | -0.230941 | 0.121139 | -2.309409 | -1.211389 | 2.607841 | 62.320969 |
8 | POINT (368000 5898040) | 89 | 6800 | 200 | 368000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
9 | POINT (370000 5898040) | 90 | 7000 | 200 | 370000.0 | 5898040.0 | 64 | 64 | -0.035693 | 0.084596 | -0.356928 | -0.845957 | 0.918172 | 22.875994 |
10 | POINT (372000 5898040) | 91 | 7200 | 200 | 372000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
11 | POINT (374000 5898040) | 92 | 7400 | 200 | 374000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
12 | POINT (376000 5898040) | 93 | 7600 | 200 | 376000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
13 | POINT (378000 5898040) | 94 | 7800 | 200 | 378000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
14 | POINT (380000 5898040) | 95 | 8000 | 200 | 380000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
15 | POINT (382000 5898040) | 96 | 8200 | 200 | 382000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
16 | POINT (384000 5898040) | 97 | 8400 | 200 | 384000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
17 | POINT (386000 5898040) | 98 | 8600 | 200 | 386000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
18 | POINT (388000 5898040) | 99 | 8800 | 200 | 388000.0 | 5898040.0 | 64 | 64 | 0.656098 | 2.533985 | 6.560977 | -25.339852 | 26.175457 | 345.483797 |
19 | POINT (390000 5898040) | 100 | 9000 | 200 | 390000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
20 | POINT (392000 5898040) | 101 | 9200 | 200 | 392000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
21 | POINT (394000 5898040) | 102 | 9400 | 200 | 394000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
22 | POINT (396000 5898040) | 103 | 9600 | 200 | 396000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
23 | POINT (398000 5898040) | 104 | 9800 | 200 | 398000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
24 | POINT (400000 5898040) | 105 | 10000 | 200 | 400000.0 | 5898040.0 | 64 | 64 | -0.147210 | -0.223871 | -1.472098 | 2.238708 | 2.679344 | 146.672433 |
25 | POINT (402000 5898040) | 106 | 10200 | 200 | 402000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
26 | POINT (404000 5898040) | 107 | 10400 | 200 | 404000.0 | 5898040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
27 | POINT (406000 5898040) | 108 | 10600 | 200 | 406000.0 | 5898040.0 | 64 | 64 | 0.249318 | 0.214416 | 2.493182 | -2.144158 | 3.288369 | 310.695805 |
28 | POINT (408000 5898040) | 109 | 10800 | 200 | 408000.0 | 5898040.0 | 64 | 64 | 0.372511 | -1.410450 | 3.725107 | 14.104504 | 14.588127 | 194.794441 |
29 | POINT (352000 5896040) | 136 | 5200 | 400 | 352000.0 | 5896040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
1947 | POINT (350000 5792040) | 2995 | 5000 | 10800 | 350000.0 | 5792040.0 | 64 | 64 | 0.209144 | -1.750348 | 2.091443 | 17.503485 | 17.627992 | 186.813809 |
1948 | POINT (352000 5792040) | 2996 | 5200 | 10800 | 352000.0 | 5792040.0 | 64 | 64 | 0.367216 | -1.643834 | 3.672159 | 16.438337 | 16.843505 | 192.592548 |
1949 | POINT (354000 5792040) | 2997 | 5400 | 10800 | 354000.0 | 5792040.0 | 64 | 64 | 0.288332 | -1.711756 | 2.883320 | 17.117562 | 17.358700 | 189.561275 |
1950 | POINT (356000 5792040) | 2998 | 5600 | 10800 | 356000.0 | 5792040.0 | 64 | 64 | 0.349523 | -1.629551 | 3.495229 | 16.295510 | 16.666142 | 192.105965 |
1951 | POINT (358000 5792040) | 2999 | 5800 | 10800 | 358000.0 | 5792040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
1952 | POINT (360000 5792040) | 3000 | 6000 | 10800 | 360000.0 | 5792040.0 | 64 | 64 | 0.356829 | -1.353932 | 3.568290 | 13.539322 | 14.001641 | 194.764576 |
1953 | POINT (362000 5792040) | 3001 | 6200 | 10800 | 362000.0 | 5792040.0 | 64 | 64 | 0.332107 | -1.475567 | 3.321073 | 14.755674 | 15.124795 | 192.684252 |
1954 | POINT (364000 5792040) | 3002 | 6400 | 10800 | 364000.0 | 5792040.0 | 64 | 64 | 0.260931 | -1.235276 | 2.609308 | 12.352761 | 12.625339 | 191.927413 |
1955 | POINT (366000 5792040) | 3003 | 6600 | 10800 | 366000.0 | 5792040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
1956 | POINT (368000 5792040) | 3004 | 6800 | 10800 | 368000.0 | 5792040.0 | 64 | 64 | 0.230095 | -1.258021 | 2.300948 | 12.580208 | 12.788901 | 190.364959 |
1957 | POINT (370000 5792040) | 3005 | 7000 | 10800 | 370000.0 | 5792040.0 | 64 | 64 | -0.096170 | -0.463691 | -0.961701 | 4.636910 | 4.735589 | 168.282899 |
1958 | POINT (372000 5792040) | 3006 | 7200 | 10800 | 372000.0 | 5792040.0 | 64 | 64 | 0.194545 | 0.126613 | 1.945447 | -1.266134 | 2.321176 | 303.056848 |
1959 | POINT (374000 5792040) | 3007 | 7400 | 10800 | 374000.0 | 5792040.0 | 64 | 64 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 | -9999.000000 |
1960 | POINT (376000 5792040) | 3008 | 7600 | 10800 | 376000.0 | 5792040.0 | 64 | 64 | -0.192273 | -0.410461 | -1.922730 | 4.104609 | 4.532627 | 154.900105 |
1961 | POINT (378000 5792040) | 3009 | 7800 | 10800 | 378000.0 | 5792040.0 | 64 | 64 | 0.411476 | -1.231980 | 4.114758 | 12.319801 | 12.988792 | 198.469086 |
1962 | POINT (380000 5792040) | 3010 | 8000 | 10800 | 380000.0 | 5792040.0 | 64 | 64 | 0.262658 | -0.490337 | 2.626580 | 4.903369 | 5.562549 | 208.176553 |
1963 | POINT (382000 5792040) | 3011 | 8200 | 10800 | 382000.0 | 5792040.0 | 64 | 64 | 0.186922 | -1.105403 | 1.869221 | 11.054032 | 11.210959 | 189.597841 |
1964 | POINT (384000 5792040) | 3012 | 8400 | 10800 | 384000.0 | 5792040.0 | 64 | 64 | -0.267606 | 0.342886 | -2.676062 | -3.428858 | 4.349526 | 37.970358 |
1965 | POINT (386000 5792040) | 3013 | 8600 | 10800 | 386000.0 | 5792040.0 | 64 | 64 | 0.368027 | -1.232417 | 3.680269 | 12.324169 | 12.861941 | 196.626786 |
1966 | POINT (388000 5792040) | 3014 | 8800 | 10800 | 388000.0 | 5792040.0 | 64 | 64 | 0.405260 | -0.790863 | 4.052597 | 7.908634 | 8.886509 | 207.131823 |
1967 | POINT (390000 5792040) | 3015 | 9000 | 10800 | 390000.0 | 5792040.0 | 64 | 64 | 0.372675 | -1.224506 | 3.726746 | 12.245065 | 12.799619 | 196.927457 |
1968 | POINT (392000 5792040) | 3016 | 9200 | 10800 | 392000.0 | 5792040.0 | 64 | 64 | 0.386730 | -1.438051 | 3.867297 | 14.380515 | 14.891447 | 195.052215 |
1969 | POINT (394000 5792040) | 3017 | 9400 | 10800 | 394000.0 | 5792040.0 | 64 | 64 | 0.433132 | -1.209992 | 4.331321 | 12.099919 | 12.851785 | 199.695480 |
1970 | POINT (396000 5792040) | 3018 | 9600 | 10800 | 396000.0 | 5792040.0 | 64 | 64 | 0.410025 | -0.784237 | 4.100254 | 7.842365 | 8.849563 | 207.602090 |
1971 | POINT (398000 5792040) | 3019 | 9800 | 10800 | 398000.0 | 5792040.0 | 64 | 64 | 0.376237 | -1.138838 | 3.762373 | 11.388382 | 11.993777 | 198.281973 |
1972 | POINT (400000 5792040) | 3020 | 10000 | 10800 | 400000.0 | 5792040.0 | 64 | 64 | 0.071339 | -0.964923 | 0.713385 | 9.649233 | 9.675568 | 184.228288 |
1973 | POINT (402000 5792040) | 3021 | 10200 | 10800 | 402000.0 | 5792040.0 | 64 | 64 | 0.246210 | -1.129963 | 2.462099 | 11.299628 | 11.564754 | 192.292166 |
1974 | POINT (404000 5792040) | 3022 | 10400 | 10800 | 404000.0 | 5792040.0 | 64 | 64 | -0.263890 | -0.903314 | -2.638901 | 9.033142 | 9.410709 | 163.715048 |
1975 | POINT (406000 5792040) | 3023 | 10600 | 10800 | 406000.0 | 5792040.0 | 64 | 64 | 0.239090 | -1.235482 | 2.390904 | 12.354817 | 12.584034 | 190.952493 |
1976 | POINT (408000 5792040) | 3024 | 10800 | 10800 | 408000.0 | 5792040.0 | 64 | 64 | 0.272772 | -0.964375 | 2.727717 | 9.643754 | 10.022098 | 195.793451 |
1977 rows × 14 columns
export geometric quality grid to an ESRI point shapefile
CRL.quality_grid.to_PointShapefile(path_out='/path/to/your/output_shapefile.shp')
Shell console interface
By far, there is no shell console interface for this module.