Closed cecileherr closed 4 years ago
When checking both files on their metadata using GDAL:
> gdalinfo bodem_v2_ok_new.tif
Driver: GTiff/GeoTIFF
Files: bodem_v2_ok_new.tif
bodem_v2_ok_new.tif.aux.xml
Size is 524, 439
Coordinate System is:
PROJCS["Belge 1972 / Belgian Lambert 72",
GEOGCS["Belge 1972",
DATUM["Reseau_National_Belge_1972",
SPHEROID["International 1924",6378388,297,
AUTHORITY["EPSG","7022"]],
TOWGS84[-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747],
AUTHORITY["EPSG","6313"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4313"]],
PROJECTION["Lambert_Conformal_Conic_2SP"],
PARAMETER["standard_parallel_1",51.16666723333333],
PARAMETER["standard_parallel_2",49.8333339],
PARAMETER["latitude_of_origin",90],
PARAMETER["central_meridian",4.367486666666666],
PARAMETER["false_easting",150000.013],
PARAMETER["false_northing",5400088.438],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["X",EAST],
AXIS["Y",NORTH],
AUTHORITY["EPSG","31370"]]
Origin = (153884.206500000000233,227200.000000000000000)
Pixel Size = (24.984263396946552,-24.954441913439634)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 153884.207, 227200.000) ( 4d25'23.67"E, 51d21'18.31"N)
Lower Left ( 153884.207, 216245.000) ( 4d25'23.24"E, 51d15'23.85"N)
Upper Right ( 166975.961, 227200.000) ( 4d36'40.17"E, 51d21'17.46"N)
Lower Right ( 166975.961, 216245.000) ( 4d36'38.32"E, 51d15'23.00"N)
Center ( 160430.084, 221722.500) ( 4d31' 1.35"E, 51d18'20.79"N)
Band 1 Block=524x3 Type=Float32, ColorInterp=Gray
Min=2.000 Max=15.000
Minimum=2.000, Maximum=15.000, Mean=10.842, StdDev=1.505
NoData Value=-3.4028234663852886e+38
Metadata:
STATISTICS_MAXIMUM=15
STATISTICS_MEAN=10.841776939262
STATISTICS_MINIMUM=2
STATISTICS_STDDEV=1.5048828165499
STATISTICS_VALID_PERCENT=100
> gdalinfo grid_brasschaat.tif
Driver: GTiff/GeoTIFF
Files: grid_brasschaat.tif
grid_brasschaat.tif.aux.xml
Size is 524, 439
Coordinate System is:
PROJCS["Belge_1972_Belgian_Lambert_72",
GEOGCS["GCS_Belge 1972",
DATUM["Reseau_National_Belge_1972",
SPHEROID["International_1924",6378388,297,
AUTHORITY["EPSG","7022"]],
AUTHORITY["EPSG","6313"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Lambert_Conformal_Conic_2SP"],
PARAMETER["standard_parallel_1",51.16666723333333],
PARAMETER["standard_parallel_2",49.8333339],
PARAMETER["latitude_of_origin",90],
PARAMETER["central_meridian",4.367486666666666],
PARAMETER["false_easting",150000.013],
PARAMETER["false_northing",5400088.438],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]]]
Origin = (153884.206500000000233,227200.000000000000000)
Pixel Size = (24.984263396938331,-24.954441913432674)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( 153884.207, 227200.000) ( 4d25'23.67"E, 51d21'18.31"N)
Lower Left ( 153884.207, 216245.000) ( 4d25'23.24"E, 51d15'23.85"N)
Upper Right ( 166975.961, 227200.000) ( 4d36'40.17"E, 51d21'17.46"N)
Lower Right ( 166975.961, 216245.000) ( 4d36'38.32"E, 51d15'23.00"N)
Center ( 160430.084, 221722.500) ( 4d31' 1.35"E, 51d18'20.79"N)
Band 1 Block=524x1 Type=Float64, ColorInterp=Gray
Min=0.000 Max=100.000
Minimum=0.000, Maximum=100.000, Mean=49.957, StdDev=29.086
Metadata:
STATISTICS_MAXIMUM=100
STATISTICS_MEAN=49.956815454972
STATISTICS_MINIMUM=0
STATISTICS_STDDEV=29.086472440779
There is indeed a small difference in pixel size in between both rasters. I would try to use one of the grids as the reference/mask and match the other values with it using any GIS tooling?
I do not think it would be a good idea to be less strict on the spatial extent matching of the input files.
After trying the following adaptation to both rasters using the gdal command line command gdalwarp
:
> gdalwarp -tr 25 -25 -tap -t_srs epsg:31370 grid_brasschaat.tif brasschaat.tif
> gdalwarp -tr 25 -25 -tap -t_srs epsg:31370 bodem_v2_ok_new.tif bodem.tif
I can run the following code:
simple = nv.Niche()
simple.set_input("mhw", path + "brasschaat.tif")
simple.set_input("mlw", path + "brasschaat.tif")
simple.set_input("soil_code",path + "bodem.tif")
simple.run(full_model=False, strict_checks=False)
wihout errors on wrong crs or alignments.
Ok, many thanks for checking!
I (unfortunately) need to stick to the strange pixel sizes I got from the groundwater modellers, but indeed if I resample everything, it works. I thought there was a tolerance for shifts smaller than 1 cm (or what does this mean exactly?). I do not consider a shift <0.0000001 mm as problematic, but I guess it is not that easy to implement a tolerance for every little source of errors ...
May I suggest to adapt the warning for set_input to "Warning: CRS definitions are not equal or different grid size or orientation are used!" instead of "Warning: CRS definitions are not equal or different "?
@cecileherr
It was indeed the intention to ignore shifts <1cm. I remember we tested this before. The comment definitely needs an update.
I will try to figure out why it is not working in this case.
@johanvdw make sure to provide the required unit tests as well.
@cecileherr The tolerance of 0.01m was not applied everywhere. I made a small adjustment and I think your grid should work now.
You can test by installing the latest version from a conda prompt (before starting python):
pip install git+https://github.com/inbo/niche_vlaanderen.git --upgrade
[ if git is not installed you will get an error, in that case you should first do conda install git
]
If I'm at INBO I will try to adjust the documentation and add a test. We can then see if we can do an updated release or if we include some other small changes.
Strictly speaking we should perhaps also reconsider the absolute 0.01m rule. If we have a huge grid and a small offset in pixel size this will sum up throughout the grid. It might be better to use 1% of the cell size (cumulative over the grid) as cutoff value. Given the typical study areas we currently have this is more a hypothetical problem.
Many thanks for looking at this issue!. Unfortunately I get an error when I try to install the latest version from github:
Command "python setup.py egg_info" failed with error code 1 in C:\Users\cecile_h err\AppData\Local\Temp\pip-build-a_bsw4vi\rasterio\ `
@cecileherr
Ok, my error it seems. You can use:
pip install git+https://github.com/inbo/niche_vlaanderen.git
(without the upgrade)
@johanvdw OK, this new version works with my slightly shifted (< 0.0001 mm) rasters. I get a CRS warning when I load the input rasters (as expected), but I can run the model without errors. Thanks again :-)
Niche Python Package question
Description
I get a CRS warning when I try to load the following tifs (here), while it seems to me that they are both in EPSG 31370. When I try to run the model I get an error "error: different grid size or orientation". There might be a minimal shift (< 0.00001 mm) between the 2 (not even visible in ArcGIS, but) QGIS reports the following characteristics:
grid_brasschaat CRS EPSG:31370 - Belge 1972 / Belgian Lambert 72 - Projected Extent 153884.2065000000002328,216245.0000000030559022 : 166975.9605199956858996,227200.0000000000000000 Pixel Size 24.98426339693833143,-24.95444191343267448 (notice they are asymmetric as expected)
bodem CRS EPSG:31370 - Belge 1972 / Belgian Lambert 72 - Projected Extent 153884.2065000000002328,216245.0000000000000000 : 166975.9605199999932665,227200.0000000000000000 Pixel Size 24.9842633969465524,-24.95444191343963425
Could this be the cause of the error? Or am I overlooking something else?
What I Did