Created
April 1, 2022 22:40
-
-
Save scottyhq/2153cb01cf951680a4dcb9e1e84b69d7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "ebcc28aa-8e3c-4cdb-94a2-730a4ea57dbe", | |
"metadata": {}, | |
"source": [ | |
"# Geoid <-> Ellipsoid reprojection\n", | |
"\n", | |
"Goal: use rasterio/rioxarray to reproject digital elevation models with Compound CRS or 3D Geodetic CRS" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "380e2c04-ecb8-4d64-8a82-270c711dd8ee", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Rioxarray: 0.10.2\n", | |
"Rasterio: 1.2.10\n", | |
"GDAL: 3.4.2\n", | |
"PROJ: 9.0.0\n" | |
] | |
} | |
], | |
"source": [ | |
"import rioxarray\n", | |
"import rasterio\n", | |
"from osgeo import gdal\n", | |
"import pyproj\n", | |
"import logging\n", | |
"print('Rioxarray:', rioxarray.__version__)\n", | |
"print('Rasterio:', rasterio.__version__)\n", | |
"print('GDAL:', gdal.__version__)\n", | |
"print('PROJ:', pyproj.__proj_version__)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "70aeaf9d-49ad-45ac-9fbd-075799b337fc", | |
"metadata": {}, | |
"source": [ | |
"## Copernicus DEM elevations are with respect to GEOID (EPSG:4326+3855) or equivalent (EPSG:9518)\n", | |
"REF: https://portal.opentopography.org/raster?opentopoID=OTSDEM.032021.4326.3\n", | |
"\n", | |
"*For elevations with respect to ellipsoid, just need to apply a \"vertical shift grid\":" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "3fde85a1-2e45-4f97-b463-5b583f2a9e53", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Candidate operations found: 1\n", | |
"-------------------------------------\n", | |
"Operation No. 1:\n", | |
"\n", | |
"unknown id, Inverse of WGS 84 to EGM2008 height (1) + WGS 84 to WGS 84 (G1150), 3 m, World., at least one grid missing\n", | |
"\n", | |
"PROJ string:\n", | |
"+proj=pipeline\n", | |
" +step +proj=axisswap +order=2,1\n", | |
" +step +proj=unitconvert +xy_in=deg +xy_out=rad\n", | |
" +step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1\n", | |
" +step +proj=unitconvert +xy_in=rad +xy_out=deg\n", | |
" +step +proj=axisswap +order=2,1\n", | |
"\n", | |
"Grid us_nga_egm08_25.tif needed but not found on the system. Can be obtained at https://cdn.proj.org/us_nga_egm08_25.tif\n" | |
] | |
} | |
], | |
"source": [ | |
"!projinfo -s EPSG:4326+3855 -t EPSG:7661 -o PROJ --hide-ballpark --spatial-test intersects" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "e6e47757-2d0e-40f9-9aa4-a07f996a8d62", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--2022-04-01 22:39:54-- https://copernicus-dem-30m.s3.eu-central-1.amazonaws.com/Copernicus_DSM_COG_10_N39_00_W109_00_DEM/Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif\n", | |
"Resolving copernicus-dem-30m.s3.eu-central-1.amazonaws.com (copernicus-dem-30m.s3.eu-central-1.amazonaws.com)... 52.219.74.9\n", | |
"Connecting to copernicus-dem-30m.s3.eu-central-1.amazonaws.com (copernicus-dem-30m.s3.eu-central-1.amazonaws.com)|52.219.74.9|:443... connected.\n", | |
"HTTP request sent, awaiting response... 200 OK\n", | |
"Length: 40712353 (39M) [image/tiff]\n", | |
"Saving to: ‘Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif’\n", | |
"\n", | |
"Copernicus_DSM_COG_ 100%[===================>] 38.83M 10.2MB/s in 3.8s \n", | |
"\n", | |
"2022-04-01 22:39:58 (10.2 MB/s) - ‘Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif’ saved [40712353/40712353]\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"# Grab a local copy\n", | |
"!wget https://copernicus-dem-30m.s3.eu-central-1.amazonaws.com/Copernicus_DSM_COG_10_N39_00_W109_00_DEM/Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "0d1df1c2-eb0b-4901-8eef-cf8c4197870c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"PROJ: pj_open_lib(proj.db): call fopen(/srv/conda/envs/notebook/share/proj/proj.db) - succeeded\n", | |
"GDAL: GDALOpen(Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif, this=0x565017c63140) succeeds as GTiff.\n", | |
"GDAL: Using GTiff driver\n", | |
"PROJ: pj_open_lib(proj.ini): call fopen(/srv/conda/envs/notebook/share/proj/proj.ini) - succeeded\n", | |
"GDAL: Computing area of interest: -109, 39.0001, -108, 40.0001\n", | |
"OGRCT: Wrap source at -108.5.\n", | |
"PROJ: pj_open_lib(us_nga_egm08_25.tif): call fopen(/srv/conda/envs/notebook/share/proj/us_nga_egm08_25.tif) - failed\n", | |
"PROJ: pj_open_lib(egm08_25.gtx): call fopen(/srv/conda/envs/notebook/share/proj/egm08_25.gtx) - failed\n", | |
"PROJ: Using https://cdn.proj.org/us_nga_egm08_25.tif\n", | |
"PROJ: pj_open_lib(us_nga_egm08_25.tif): call fopen(/srv/conda/envs/notebook/share/proj/us_nga_egm08_25.tif) - failed\n", | |
"PROJ: pj_open_lib(egm08_25.gtx): call fopen(/srv/conda/envs/notebook/share/proj/egm08_25.gtx) - failed\n", | |
"PROJ: Using https://cdn.proj.org/us_nga_egm08_25.tif\n", | |
"GDAL: GDALDriver::Create(GTiff,./Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid.tif,3600,3600,1,Float32,(nil))\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Creating output file that is 3600P x 3600L.\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"WARP: Copying metadata from first source to destination dataset\n", | |
"GTiff: ScanDirectories()\n", | |
"GTiff: Opened 1800x1800 overview.\n", | |
"GTiff: Opened 900x900 overview.\n", | |
"GTiff: Opened 450x450 overview.\n", | |
"GDALWARP: Defining SKIP_NOSOURCE=YES\n", | |
"PROJ: Using coordinate operation WGS 84 to EGM2008 height (1)\n", | |
"PROJ: pj_open_lib(us_nga_egm08_25.tif): call fopen(/srv/conda/envs/notebook/share/proj/us_nga_egm08_25.tif) - failed\n", | |
"PROJ: pj_open_lib(egm08_25.gtx): call fopen(/srv/conda/envs/notebook/share/proj/egm08_25.gtx) - failed\n", | |
"PROJ: Using https://cdn.proj.org/us_nga_egm08_25.tif\n", | |
"PROJ: Using coordinate operation WGS 84 to EGM2008 height (1)\n", | |
"PROJ: pj_open_lib(us_nga_egm08_25.tif): call fopen(/srv/conda/envs/notebook/share/proj/us_nga_egm08_25.tif) - failed\n", | |
"PROJ: pj_open_lib(egm08_25.gtx): call fopen(/srv/conda/envs/notebook/share/proj/egm08_25.gtx) - failed\n", | |
"PROJ: Using https://cdn.proj.org/us_nga_egm08_25.tif\n", | |
"GDAL: GDAL_CACHEMAX = 387 MB\n", | |
"GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=0,0,3600x1800 Dst=0,0,3600x1800\n", | |
"GDAL: GDALWarpKernel()::GWKNearestNoMasksOrDstDensityOnlyFloat() Src=0,1800,3600x1800 Dst=0,1800,3600x1800\n", | |
"GDAL: Flushing dirty blocks: 0...10...20...30...40...50...60...70...80...90...100 - done.\n", | |
"GDAL: GDALClose(./Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid.tif, this=0x565017fe6c10)\n", | |
"GDAL: GDALClose(Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif, this=0x565017c63140)\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Processing Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif [1/1] : 0...10...20...30...40...50...60...70...80...90...100 - done.\n" | |
] | |
} | |
], | |
"source": [ | |
"%%bash\n", | |
"\n", | |
"# GDAL knows how to go fetch a vshift grid from the web and apply it:\n", | |
"\n", | |
"#INPUT='/vsis3/copernicus-dem-30m/Copernicus_DSM_COG_10_N39_00_W109_00_DEM/Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif' \n", | |
"INPUT='Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif'\n", | |
"OUTPUT='./Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid.tif' \n", | |
"\n", | |
"AWS_NO_SIGN_REQUEST=YES \\\n", | |
"GDAL_DISABLE_READDIR_ON_OPEN=EMPTY_DIR \\\n", | |
"CPL_DEBUG=ON \\\n", | |
"PROJ_DEBUG=2 \\\n", | |
"gdalwarp -s_srs EPSG:4326+3855 -t_srs EPSG:7661 $INPUT $OUTPUT" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "450ac2b2-b689-4666-96ef-556904e3228f", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"< STATISTICS_MAXIMUM=3327.7126464844\n", | |
"< STATISTICS_MEAN=2033.3877791249\n", | |
"< STATISTICS_MINIMUM=1324\n", | |
"< STATISTICS_STDDEV=372.76572182465\n", | |
"> STATISTICS_MAXIMUM=3312.0522460938\n", | |
"> STATISTICS_MEAN=2016.9418973372\n", | |
"> STATISTICS_MINIMUM=1306.1044921875\n", | |
"> STATISTICS_STDDEV=373.10998217841\n" | |
] | |
} | |
], | |
"source": [ | |
"%%bash \n", | |
"\n", | |
"gdalinfo -stats Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif > geoid.info\n", | |
"gdalinfo -stats Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid.tif > ellipsoid.info\n", | |
"diff geoid.info ellipsoid.info | grep STATISTICS" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "d7f2a5b4-69b4-42fe-868e-1b1fd0d30c78", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f6cb6fbdf10>\n", | |
"DEBUG:rasterio.env:Starting outermost env\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> created\n", | |
"DEBUG:rasterio._env:GDAL_DATA found in environment.\n", | |
"DEBUG:rasterio._env:PROJ_LIB found in environment.\n", | |
"DEBUG:rasterio._env:Started GDALEnv: self=<rasterio._env.GDALEnv object at 0x7f6cb785d790>.\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f6cb6fbdf10>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f6cb6fbbbe0>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f6cb6fbbbe0>\n", | |
"DEBUG:rasterio._base:Sharing flag: 0\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(./Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif, this=0x5633d6e830a0) succeeds as GTiff.\n", | |
"DEBUG:rasterio._base:Nodata success: 0, Nodata value: -10000000000.000000\n", | |
"DEBUG:rasterio._base:Dataset <open DatasetReader name='./Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif' mode='r'> is started.\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f6cb6fbbbe0>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f6cb785d790>.\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> created\n", | |
"DEBUG:rasterio._env:GDAL_DATA found in environment.\n", | |
"DEBUG:rasterio._env:PROJ_LIB found in environment.\n", | |
"DEBUG:rasterio._env:Started GDALEnv: self=<rasterio._env.GDALEnv object at 0x7f6cb785d790>.\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f6cb6fbbbe0>\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: ScanDirectories()\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 1800x1800 overview.\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 900x900 overview.\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 450x450 overview.\n", | |
"DEBUG:rasterio._crs:Matched. confidence=100, c_code=b'4326', c_name=b'EPSG'\n", | |
"DEBUG:rasterio._crs:Matched. confidence=100, c_code=b'9518', c_name=b'EPSG'\n", | |
"DEBUG:rasterio._env:CPLE_None in VRT: No valid sources found for band in VRT file \n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(<VRTDataset rasterYSize=\"3600\" rasterXSize=\"3600\"><VRTRasterBand /><SRS>COMPD_CS[\"WGS 84 + EGM2008 height\",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\"]],VERT_CS[\"EGM2008 height\",VERT_DATUM[\"EGM2008 geoid\",2005,AUTHORITY[\"EPSG\",\"1027\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"3855\"]],AUTHORITY[\"EPSG\",\"9518\"]]</SRS><GeoTransform>-109.00013888888888,0.0002777777777777738,0.0,40.00013888888889,0.0,-0.00027777777777777973</GeoTransform></VRTDataset>, this=0x5633d6e0aad0) succeeds as VRT.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: Computing area of interest: -109, 39.0001, -108, 40.0001\n", | |
"DEBUG:rasterio._env:CPLE_None in OGRCT: Wrap source at -108.5.\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"EPSG:4326\n", | |
"EPSG:9518\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"DEBUG:rasterio._warp:Created transformer and warp output.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(<VRTDataset rasterYSize=\"3600\" rasterXSize=\"3600\"><VRTRasterBand /><SRS>COMPD_CS[\"WGS 84 + EGM2008 height\",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\"]],VERT_CS[\"EGM2008 height\",VERT_DATUM[\"EGM2008 geoid\",2005,AUTHORITY[\"EPSG\",\"1027\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"3855\"]],AUTHORITY[\"EPSG\",\"9518\"]]</SRS><GeoTransform>-109.00013888888888,0.0002777777777777738,0.0,40.00013888888889,0.0,-0.00027777777777777973</GeoTransform></VRTDataset>, this=0x5633d6e0aad0)\n", | |
"DEBUG:rasterio._io:Output nodata value read from file: None\n", | |
"DEBUG:rasterio._io:Output nodata values: [None]\n", | |
"DEBUG:rasterio._io:all_valid: True\n", | |
"DEBUG:rasterio._io:mask_flags: ([<MaskFlags.all_valid: 1>],)\n", | |
"DEBUG:rasterio._io:Jump straight to _read()\n", | |
"DEBUG:rasterio._io:Window: Window(col_off=0, row_off=0, width=3600, height=3600)\n", | |
"DEBUG:rasterio._io:IO window xoff=0.0 yoff=0.0 width=3600.0 height=3600.0\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDAL_CACHEMAX = 387 MB\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALDriver::Create(MEM,771c1832-6816-4805-bcaa-2227d049ce6d,3600,3600,1,Float32,(nil))\n", | |
"DEBUG:rasterio._crs:Matched. confidence=100, c_code=b'9518', c_name=b'EPSG'\n", | |
"DEBUG:rasterio._io:Set CRS on temp dataset: b'COMPD_CS[\"WGS 84 + EGM2008 height\",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\"]],VERT_CS[\"EGM2008 height\",VERT_DATUM[\"EGM2008 geoid\",2005,AUTHORITY[\"EPSG\",\"1027\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"3855\"]],AUTHORITY[\"EPSG\",\"9518\"]]'\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALDriver::Create(MEM,6930c86a-e1a4-4304-b6cc-fe2cff610e70,3600,3600,1,Float32,(nil))\n", | |
"DEBUG:rasterio._io:Set CRS on temp dataset: b'GEOGCRS[\"WGS 84 (G1150)\",DYNAMIC[FRAMEEPOCH[2001]],DATUM[\"World Geodetic System 1984 (G1150)\",ELLIPSOID[\"WGS 84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[ellipsoidal,3],AXIS[\"geodetic latitude (Lat)\",north,ORDER[1],ANGLEUNIT[\"degree\",0.0174532925199433]],AXIS[\"geodetic longitude (Lon)\",east,ORDER[2],ANGLEUNIT[\"degree\",0.0174532925199433]],AXIS[\"ellipsoidal height (h)\",up,ORDER[3],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"Geodesy. Navigation and positioning using GPS satellite system.\"],AREA[\"World.\"],BBOX[-90,-180,90,180]],ID[\"EPSG\",7661]]'\n", | |
"DEBUG:rasterio._warp:Created temp destination dataset.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: Computing area of interest: -109, 39.0001, -108, 40.0001\n", | |
"DEBUG:rasterio._warp:Created approximate transformer\n", | |
"DEBUG:rasterio._warp:Created transformer and options.\n", | |
"DEBUG:rasterio._warp:Setting NUM_THREADS option: 1\n", | |
"DEBUG:rasterio._warp:Configured to warp src band 1 to destination band 1\n", | |
"DEBUG:rasterio._warp:Set transformer options\n", | |
"DEBUG:rasterio._warp:Chunk and warp window: 0, 0, 3600, 3600.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=0,0,1800x1800 Dst=0,0,1800x1800\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=1800,0,1800x1800 Dst=1800,0,1800x1800\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=0,1800,1800x1800 Dst=0,1800,1800x1800\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=1800,1800,1800x1800 Dst=1800,1800,1800x1800\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(Temporary destination dataset for _reproject(), this=0x5633d70cb510)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(771c1832-6816-4805-bcaa-2227d049ce6d, this=0x5633d5072250)\n", | |
"DEBUG:rasterio._crs:Matched. confidence=100, c_code=b'7661', c_name=b'EPSG'\n", | |
"/srv/conda/envs/notebook/lib/python3.9/site-packages/rioxarray/raster_writer.py:108: UserWarning: The nodata value (3.402823466e+38) has been automatically changed to (3.4028234663852886e+38) to match the dtype of the data.\n", | |
" warnings.warn(\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f6cb65a0f70>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f6cb65a0f70>\n", | |
"DEBUG:rasterio._io:Path: UnparsedPath(path='./Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid_rio.tif'), mode: w, driver: GTiff\n", | |
"DEBUG:rasterio._io:Skipped delete for overwrite. Dataset does not exist: './Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid_rio.tif'\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALDriver::Create(GTiff,./Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid_rio.tif,3600,3600,1,Float32,(nil))\n", | |
"DEBUG:rasterio._base:Nodata success: 1, Nodata value: 340282346638528859811704183484516925440.000000\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f6cb65a0f70>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f6cb785d790>.\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f6cb785d790> created\n", | |
"DEBUG:rasterio._env:GDAL_DATA found in environment.\n", | |
"DEBUG:rasterio._env:PROJ_LIB found in environment.\n", | |
"DEBUG:rasterio._env:Started GDALEnv: self=<rasterio._env.GDALEnv object at 0x7f6cb785d790>.\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f6cb65a0f70>\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"EPSG:7661\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(./Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid_rio.tif, this=0x5633d72b7960)\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f6cb6fbdf10>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f6cb785d790> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f6cb785d790>.\n", | |
"DEBUG:rasterio.env:Exiting outermost env\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f6cb6fbdf10>\n" | |
] | |
} | |
], | |
"source": [ | |
"# Rioxarray / rasterio don't seem to handle 3D CRS\n", | |
"\n", | |
"logging.basicConfig(level=logging.DEBUG,\n", | |
" #format='%(asctime)s %(message)s',\n", | |
" handlers=[logging.StreamHandler(),\n", | |
" logging.FileHandler('rioxarray.log')], #NOTE: appends by default\n", | |
" )\n", | |
"\n", | |
"\n", | |
"INPUT = './Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif'\n", | |
"OUTPUT= './Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid_rio.tif'\n", | |
"\n", | |
"with rasterio.Env(GDAL_DISABLE_READDIR_ON_OPEN='EMPTY_DIR',\n", | |
" AWS_NO_SIGN_REQUEST='YES',\n", | |
" CPL_DEBUG=True,\n", | |
" PROJ_DEBUG=2, #NOT sure how to expose these\n", | |
" ):\n", | |
"\n", | |
" da = rioxarray.open_rasterio(INPUT)\n", | |
" print(da.rio.crs)\n", | |
" \n", | |
" # Assign true 3D geodetic CRS\n", | |
" CRS = da.rio.crs.from_epsg(9518) #shorthand for \"EPSG:4326+3855\"\n", | |
" daGeoid = da.rio.write_crs(CRS)\n", | |
" print(daGeoid.rio.crs)\n", | |
" \n", | |
" # Reproject to Ellipsoid (apply vshift grid)\n", | |
" daEllipsoid = daGeoid.rio.reproject(7661)\n", | |
" print(daEllipsoid.rio.crs)\n", | |
" \n", | |
" daEllipsoid.rio.to_raster(OUTPUT)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "56687342-6a70-48b7-874b-eba959369071", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"< STATISTICS_MEAN=2033.3877791249\n", | |
"> STATISTICS_MEAN=2033.3877791246\n", | |
"< STATISTICS_STDDEV=372.76572182465\n", | |
"> STATISTICS_STDDEV=372.76572182466\n" | |
] | |
} | |
], | |
"source": [ | |
"%%bash \n", | |
"\n", | |
"gdalinfo -stats Copernicus_DSM_COG_10_N39_00_W109_00_DEM.tif > geoid.info\n", | |
"gdalinfo -stats Copernicus_DSM_COG_10_N39_00_W109_00_DEM_ellipsoid_rio.tif > ellipsoid.info\n", | |
"diff geoid.info ellipsoid.info | grep STATISTICS" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.9.10" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment