Created
August 2, 2022 18:51
-
-
Save scottyhq/fd70d40e494db5c54a796555f6e46e38 to your computer and use it in GitHub Desktop.
This file contains 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": "2cdf7952-db66-4d9e-81f9-b5c292f89074", | |
"metadata": {}, | |
"source": [ | |
"# Troubleshooting vertical shift grids with rasterio\n", | |
"\n", | |
"https://github.com/rasterio/rasterio/issues/2433" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "1ba60ccd-5aca-4695-bfbf-32cb59e07788", | |
"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 EGM96 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_egm96_15.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_egm96_15.tif needed but not found on the system. Can be obtained at https://cdn.proj.org/us_nga_egm96_15.tif\n" | |
] | |
} | |
], | |
"source": [ | |
"!projinfo -s EPSG:9707 -t EPSG:7661 -o PROJ --hide-ballpark --spatial-test intersects" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "721a389b-7bcb-4d6b-a264-23b19425ab8e", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"GDAL 3.5.1, released 2022/06/30\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"PROJ: pj_open_lib(proj.db): call fopen(/srv/conda/envs/notebook/share/proj/proj.db) - succeeded\n", | |
"HTTP: Fetch(https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif)\n", | |
"HTTP: libcurl/7.83.1 OpenSSL/1.1.1q zlib/1.2.12 libssh2/1.10.0 nghttp2/1.47.0\n", | |
"GDAL: GDALOpen(/vsimem/http_1/N39W109.tif, this=0x55b9123a6930) succeeds as GTiff.\n", | |
"GDAL: GDALOpen(https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif, this=0x55b9123a6930) succeeds as HTTP.\n", | |
"GDAL: GDALOpen(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0) succeeds as GTiff.\n", | |
"GDAL: GDALClose(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0)\n", | |
"GDAL: Using GTiff driver\n", | |
"GDAL: GDALOpen(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0) succeeds as GTiff.\n", | |
"GDAL: GDALDefaultOverviews::OverviewScan()\n", | |
"GDAL: GDALClose(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0)\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, 38.9999, -108, 40.0001\n", | |
"OGRCT: Wrap source at -108.5.\n", | |
"PROJ: pj_open_lib(us_nga_egm96_15.tif): call fopen(/srv/conda/envs/notebook/share/proj/us_nga_egm96_15.tif) - failed\n", | |
"PROJ: pj_open_lib(egm96_15.gtx): call fopen(/srv/conda/envs/notebook/share/proj/egm96_15.gtx) - failed\n", | |
"PROJ: Using https://cdn.proj.org/us_nga_egm96_15.tif\n", | |
"PROJ: pj_open_lib(us_nga_egm96_15.tif): call fopen(/srv/conda/envs/notebook/share/proj/us_nga_egm96_15.tif) - failed\n", | |
"PROJ: pj_open_lib(egm96_15.gtx): call fopen(/srv/conda/envs/notebook/share/proj/egm96_15.gtx) - failed\n", | |
"PROJ: Using https://cdn.proj.org/us_nga_egm96_15.tif\n", | |
"GDAL: QuietDelete(epsg7661_gdal351_srtm.tif) invoking Delete()\n", | |
"GDAL: GDALOpen(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0) succeeds as GTiff.\n", | |
"GDAL: GDALDefaultOverviews::OverviewScan()\n", | |
"GDAL: GDALClose(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0)\n", | |
"GDAL: GDALDriver::Create(GTiff,epsg7661_gdal351_srtm.tif,3601,3601,1,Float32,(nil))\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Creating output file that is 3601P x 3601L.\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"WARP: Copying metadata from first source to destination dataset\n", | |
"GTiff: ScanDirectories()\n", | |
"GTiff: Opened 1801x1801 overview.\n", | |
"GTiff: Opened 901x901 overview.\n", | |
"GTiff: Opened 451x451 overview.\n", | |
"WARP: srcNoData=-32768.000000 dstNoData=-32768.000000\n", | |
"WARP: calling GDALSetRasterNoDataValue() for band#0\n", | |
"GDALWARP: Defining SKIP_NOSOURCE=YES\n", | |
"GDAL: GDAL_CACHEMAX = 1582 MB\n", | |
"GDAL: GDALWarpKernel()::GWKNearestFloat() Src=0,0,3601x1800 Dst=0,0,3601x1800\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Processing https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif [1/1] : 0Using internal nodata values (e.g. -32768) for image https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif.\n", | |
"Copying nodata values from source https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif to destination epsg7661_gdal351_srtm.tif.\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"GDAL: GDALWarpKernel()::GWKNearestFloat() Src=0,1800,3601x1801 Dst=0,1800,3601x1801\n", | |
"GDAL: Flushing dirty blocks: 0...10...20...30...40...50...60...70...80...90...100 - done.\n", | |
"GDAL: GDALClose(epsg7661_gdal351_srtm.tif, this=0x55b911f8a4e0)\n", | |
"GDAL: GDALClose(https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif, this=0x55b9123a6930)\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"...10...20...30...40...50...60...70...80...90...100 - done.\n" | |
] | |
} | |
], | |
"source": [ | |
"%%bash\n", | |
"gdalinfo --version\n", | |
"\n", | |
"INPUT='https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif'\n", | |
"OUTPUT='epsg7661_gdal351_srtm.tif'\n", | |
"CPL_DEBUG=ON \\\n", | |
"PROJ_DEBUG=2 \\\n", | |
"GDAL_DISABLE_READDIR_ON_OPEN='EMPTY_DIR' gdalwarp -overwrite -ot Float32 -s_srs EPSG:9707 -t_srs EPSG:7661 $INPUT $OUTPUT" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "2dd928d6-142c-40d4-ab6d-d39a6d9cdc42", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import rasterio #1.3, gdal=3.5.1, proj=9.0.1\n", | |
"from rasterio.warp import calculate_default_transform, reproject, Resampling\n", | |
"import numpy as np\n", | |
"import logging\n", | |
"import os\n", | |
"\n", | |
"# Necessary to expose PROJ-level logs\n", | |
"os.environ[\"PROJ_DEBUG\"] = \"2\"\n", | |
"# Hmm with rasterio 1.3 no longer see PROJ logs? (PROJ: Using https://cdn.proj.org/us_nga_egm08_25.tif)\n", | |
"\n", | |
"logging.basicConfig(level=logging.DEBUG,\n", | |
" handlers=[#logging.StreamHandler(),\n", | |
" logging.FileHandler('rasterio.log')], \n", | |
" )\n", | |
"url = 'https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif'\n", | |
"\n", | |
"# Efficiently read the entire COG \n", | |
"ENV = rasterio.Env(GDAL_DISABLE_READDIR_ON_OPEN='EMPTY_DIR',\n", | |
" AWS_NO_SIGN_REQUEST='YES',\n", | |
" GDAL_MAX_RAW_BLOCK_CACHE_SIZE=240_000_000, \n", | |
" GDAL_SWATH_SIZE=240_000_000,\n", | |
" CPL_DEBUG=True,\n", | |
" )\n", | |
"\n", | |
"with rasterio.open('epsg7661_gdal351_srtm.tif') as src:\n", | |
" gdal_array = src.read(1)\n", | |
"\n", | |
"residuals = []\n", | |
" \n", | |
"warp_mem_limits = [128, 64, 32, 16] # in MB\n", | |
"\n", | |
"\n", | |
"for WARPLIMIT in warp_mem_limits:\n", | |
" with ENV:\n", | |
" with rasterio.open(url) as src: \n", | |
" src_data = src.read()\n", | |
"\n", | |
" # original metadata unaware of vertical reference\n", | |
" src_crs3D = rasterio.crs.CRS.from_epsg('9707')\n", | |
" dst_crs = rasterio.crs.CRS.from_epsg('7661') \n", | |
" transform, width, height = calculate_default_transform(src_crs3D, \n", | |
" dst_crs, \n", | |
" src.width, \n", | |
" src.height, \n", | |
" *src.bounds)\n", | |
" kwargs = src.meta.copy()\n", | |
" kwargs.update({\n", | |
" 'crs': dst_crs,\n", | |
" 'transform': transform,\n", | |
" 'width': width,\n", | |
" 'height': height,\n", | |
" 'dtype': np.float32,\n", | |
" })\n", | |
"\n", | |
" with rasterio.open('epsg7661_rio13_srtm.tif', 'w', **kwargs) as dst:\n", | |
" dst_data = np.zeros((1,width,height))\n", | |
" reproject(source=src_data,\n", | |
" destination=dst_data,\n", | |
" src_transform=src.transform,\n", | |
" src_crs=src_crs3D,\n", | |
" dst_transform=transform,\n", | |
" dst_crs=dst_crs,\n", | |
" resampling=Resampling.nearest,\n", | |
" apply_vertical_shift=True,\n", | |
" warp_mem_limit=WARPLIMIT,\n", | |
" )\n", | |
" \n", | |
" RMSE = np.sqrt(np.mean((gdal_array - dst_data)**2))\n", | |
" residuals.append(RMSE)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "82b9094a-2480-4d09-9650-e44cbf5e09ff", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAw8AAAILCAYAAACuOqB0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAABYlAAAWJQFJUiTwAABjV0lEQVR4nO3dd5xU1f3/8dcHJGIDuzGa2CtGETsoqGvQ6Fesyyz28tVoTDTG1G8s0bRfmhpNTAxq7GwRa7Cgq4CKjWbBjqLYu1hQKef3x8yOu+suu8vO7uzsvp6Pxzyue+65557ZizDvOeeeGyklJEmSJKklvYrdAUmSJEmlwfAgSZIkqVUMD5IkSZJaxfAgSZIkqVUMD5IkSZJaxfAgSZIkqVUMD5IkSZJaxfAgSZIkqVUMD5IkSZJaxfAgSZIkqVUMD5IkSZJaxfAgSZIkqVWWKnYH9KWIeBHoB8wuclckSZLUva0LzE0prdeWgwwPXUu/ZZZZZuXNNtts5WJ3RJIkSd3XU089xbx589p8nOGha5m92WabrTx16tRi90OSJEnd2DbbbMO0adNmt/U473mQJEmS1CqGB0mSJEmtYniQJEmS1CqGB0mSJEmtYniQJEmS1CqGB0mSJEmtYniQJEmS1CqGB0mSJEmtYniQJEmS1CqGB0mSJEmtslSxOyBJkiT1NDNnzqS2tpa5c+fSr18/ysrKGDBgQLG71SLDgyRJktRJamtrOeecc5g0adJX9g0dOpQzzzyTsrKyIvSsdZy2JEmSJHWCSy+9lOHDhzcZHAAmTZrE8OHDueyyyzq5Z61neJAkSZI6WG1tLccffzyLFi1abL1FixZx3HHHUVtb20k9axvDgyRJktTBzjnnnBaDQ51Fixbxm9/8poN7tGQMD5IkSVIHmjlzZrNTlZozceJEZs6c2UE9WnKGB0mSJKkDLekUpK44dcnwIEmSJHWguXPndupxHcnwIEmSJHWgfv36depxHcnwIEmSJHWgJX1uQ1d83oPhQZIkSeogixYtYty4cW0+btiwYV3yidM+YVqSJEnqAO+++y5HHnlkm8NDr169OOOMMzqoV+3jyIMkSZJUYA888ABbb711g+Cw/vrr06vX4j9+9+rVi9GjR3fJKUtgeJAkSZIKZtGiRfzlL39h6NChzJkzJ1/+05/+lKeffprx48czbNiwJo8dNmwY48eP55hjjums7raZ05YkSZKkAnjvvfc48sgj+e9//5svW2mllbjiiivYd999gexN0GVlZcycOZPa2lrmzp1Lv379KCsr65L3ODRmeJAkSZLa6cEHHySTyfDyyy/ny3bYYQeqqqpYZ511vlJ/wIABJREWGnPakiRJkrSEUkr89a9/ZZdddmkQHE477TQmTZrUZHAoZY48SJIkSUvgvffe46ijjuKWW27Jl6244opcccUVjBgxoog96ziGB0mSJKmNHnroITKZDC+99FK+bPvtt6eqqop11123eB3rYE5bkiRJkloppcR5553Hzjvv3CA4nHrqqdx7773dOjhAiYaHiFg7Ii6LiNci4vOImB0R50fESm1o4+CIuDAi7o2IuRGRIuLqxdTfKCJ+HhF3R8SciPgiIt6MiJsiYrfCvDNJkiR1Ve+//z4HHHAAP/7xj1mwYAGQnaZ0ww03cO655/K1r32tyD3seCU3bSkiNgAmA6sDNwFPA9sDpwB7RcSQlNK7rWjqdGAr4GPgFWDTFur/BsgATwK3Au8BmwAjgBERcUpK6YK2vyNJkiR1dQ8//DAjR45sMNqw3XbbUVVVxXrrrVfEnnWuUhx5uIhscDg5pbR/SukXKaXdgfPIfpj/XSvbORXYGOgHnNiK+rcDg1JKA1JK30sp/TKldCBQBswH/hwRa7b1zUiSJKnrSilx/vnnf2Wa0imnnMJ9993Xo4IDlFh4iIj1geHAbOAfjXafBXwCHB4Ry7XUVkrpnpTScyml1Jpzp5QuTylNb6J8IjAB+BowuDVtSZIkqet7//33OfDAAzn11FOZP38+AP379+f666/n/PPP7xHTlBortWlLu+e241NKi+rvSCl9FBH3kw0XOwK1ndiv+bntgtZUjoipzexqaeqUJEmSOsEjjzzCyJEjmT17dr5s2223pbq6useNNtRXUiMPZKclATzbzP7nctuNO6EvAETEOmSnLn0KTOqs80qSJKnwUkpccMEFDBkypEFwOPnkk3vkNKXGSm3koX9u+2Ez++vKV+z4rkBELA1cAywN/Cyl9H5rjkspbdNMe1OBQYXroSRJklrrgw8+4Nhjj+X666/Pl/Xv35/LLruMAw88sIg96zpKLTy0JHLbVt3H0K4TRfQGrgKGAFXAXzr6nJIkSeoYU6ZMYeTIkbz44ov5sm222Ybq6mrWX3/9Ivasaym1aUt1Iwv9m9nfr1G9DpELDlcD5UA1cFhrb7yWJElS15FS4sILL2Tw4MENgsMPfvAD7r//foNDI6U28vBMbtvcPQ0b5bbN3RPRbhGxFHAt2eBwLXBESmlhR51PkiRJHePDDz/k2GOPZezYsfmyfv36cemll3LwwQcXsWddV6mFh3ty2+ER0av+iksRsQLZKUTzgAc74uQR8TWyIw37AVcCRzde9UmSJEld39SpUxk5ciQvvPBCvmzQoEFUV1ezwQYbFLFnXVtJTVtKKc0CxgPrAic12n02sBxwZUrpE4CI6BMRm+aeSt0uuZujbyAbHC7F4CBJklRyUkr84x//YPDgwQ2Cw0knncTkyZMNDi0otZEHgO8Dk4ELIqIMeArYAdiN7HSlX9Wru1Zu/0tkA0deROwP7J/78eu57U4RcXnuv99JKf2k3iH/AvYG3gFeBc6MCBqZkFKasETvSpIkSR3qww8/5LjjjqOmpiZftsIKK3DppZdSXl5exJ6VjpILDymlWRGxLXAOsBfZD/SvAxcAZ6eU3mtlUwOBIxuVrZ97QTZw1A8PdYv6rgqcuZh2J7Ty/JIkSeok06ZNY+TIkcyaNStftvXWW1NdXc2GG25YxJ6VlpILDwAppTnA0a2oN5svl29tvO/XwK/bcM5dW1tXkiRJXUNKiX/+85+ceuqpfPHFF/nyE088kXPPPZe+ffsWsXelpyTDgyRJktSSuXPnctxxx1FdXZ0vW2GFFRg9ejSZTKaIPStdhgdJkiR1O9OnT2fkyJE8//zz+bKBAwdSXV3NRhtttJgjtTgltdqSJEmStDgpJf71r3+x0047NQgOJ5xwAg888IDBoZ0ceZAkSVK3MHfuXL73ve9RWVmZL1t++eUZPXo0FRUVRexZ92F4kCRJUsl79NFHKS8v57nnnsuXbbnlltTU1LDxxhsXsWfdi9OWJEmSVLJSSvz73/9mhx12aBAcjj/+eB588EGDQ4E58iBJkqSS9NFHH/G9732PMWPG5MuWX355Lr74Yg455JAi9qz7MjxIkiSp5Dz22GOUl5fz7LPP5su+/e1vU1NTwyabbFLEnnVvTluSJElSyUgpcckll7DDDjs0CA7HHXccDz30kMGhgznyIEmSpJLw8ccfc8IJJ3DNNdfky5ZbbjkuvvhiDj300CL2rOcwPEiSJKnLe/zxxykvL+eZZ57Jl22xxRbU1NSw6aabFrFnPYvTliRJktRlpZS49NJL2X777RsEh2OPPZaHHnrI4NDJHHmQJElSl/Txxx9z4okncvXVV+fLll12Wf71r39x+OGHF7FnPZfhQZIkSV3OE088QXl5OU8//XS+bMCAAdTU1LDZZpsVsWc9m9OWJEmS1GWklPjPf/7D9ttv3yA4HHPMMTz88MMGhyJz5EGSJEldwieffML3v/99rrzyynzZsssuyz//+U+OOOKIIvZMdQwPkiRJKrqZM2dSXl7OU089lS/bfPPNqampYfPNNy9iz1Sf05YkSZJUVJdffjnbbbddg+Bw1FFH8fDDDxscuhhHHiRJklQUn3zyCSeddBJXXHFFvmyZZZbhoosu4qijjipex9Qsw4MkSZI63ZNPPkl5eTlPPvlkvmyzzTajpqaGAQMGFLFnWhynLUmSJKlTXXnllWy33XYNgsMRRxzBI488YnDo4gwPkiRJ6hSffvopxxxzDEceeSSffvopkJ2mdNlll3HFFVew3HLLFbmHaonTliRJktThnnrqKcrLy5k5c2a+bNNNN6WmpoYtttiiiD1TWzjyIEmSpA511VVXse222zYIDocddhiPPPKIwaHEGB4kSZLUIT799FOOPfZYjjjiiPw0pb59+3LJJZdw5ZVXsvzyyxe5h2orpy1JkiSp4J5++mnKy8t54okn8mWbbLIJNTU1fPvb3y5iz9QejjxIkiSpoK655hq23XbbBsHh0EMPZcqUKQaHEmd4kCRJUkHMmzeP4447jsMOO4xPPvkEyE5TGj16NFdddZXTlLoBpy1JkiSp3Z555hnKy8t5/PHH82Ubb7wxNTU1bLnllkXsmQrJkQdJkiS1y7XXXss222zTIDiMGjWKKVOmGBy6GcODJEmSlsi8efM4/vjjOfTQQ/PTlJZeemkuvvhirrnmGlZYYYUi91CF5rQlSZIktdmzzz5LeXk5jz32WL5so402oqamhq222qqIPVNHcuRBkiRJbTJmzBi22WabBsGhoqKCqVOnGhy6OcODJEmSWuWzzz7jhBNO4JBDDuHjjz8GstOU/vWvf3Httdc6TakHcNqSJEmSWvTcc89RXl7Oo48+mi/bcMMNqampYeDAgcXrmDqVIw+SJElarKqqKgYNGtQgOGQyGaZOnWpw6GEMD5IkSWrSZ599xoknnkhFRUV+mtLXvvY1LrroIsaMGUO/fv2K3EN1NqctSZIk6Suef/55ysvLmTFjRr5sgw02oKamhq233rp4HVNROfIgSZKkBmpqahg0aFCD4FBeXs60adMMDj2c4UGSJElAdprSD37wA0aOHMlHH30EZKcp/eMf/6CqqsppSnLakiRJkmDWrFmMHDmSadOm5cvWX3/9/CiEBI48SJIk9XjXXXcdgwYNahAcDjroIKZNm2ZwUAOGB0mSpB7q888/54c//CHl5eXMnTsXyE5TuvDCC6mpqaF///5F7qG6GqctSZIk9UCzZs3KP6uhznrrrUd1dTXbbrttEXumrsyRB0mSpB5m7NixDBo0qEFwOPDAA5k2bZrBQYtleJAkSeohPv/8c0455RQOPvjg/DSlPn36cMEFF3Ddddex4oorFreD6vKctiRJktQDvPDCC2QyGaZMmZIvW2+99aiqqmK77bYrYs9USkpy5CEi1o6IyyLitYj4PCJmR8T5EbFSG9o4OCIujIh7I2JuRKSIuLoVxw2OiFsj4r2I+DQiHouIH0VE7/a9K0mSpI5xww03MGjQoAbB4YADDmDatGkGB7VJyYWHiNgAmAocDTwMnAe8AJwCPBARq7SyqdOBHwADgVdbee79gEnAUOAG4B/A13J9qGz1m5AkSeoEX3zxBT/60Y848MAD+fDDD4HsNKXzzz+fsWPHOk1JbVaK05YuAlYHTk4pXVhXGBHnAqcCvwNOaEU7pwKvAM8Dw4B7Flc5IvoBo4GFwK4ppSm58jOAu4GDI6IipWSIkCRJRffiiy+SyWR45JFH8mXrrrsuVVVVbL/99kXsmUpZSY08RMT6wHBgNtlv/es7C/gEODwilmuprZTSPSml51JKqZWnPxhYDaisCw65dj4jO4oBcGIr25IkSeowN954I4MGDWoQHPbbbz+mTZtmcFC7lFR4AHbPbcenlBbV35FS+gi4H1gW2LEDz317E/smAZ8CgyNi6Q44tyRJUou++OILfvzjH3PAAQfwwQcfALDUUktx3nnnccMNN7DSSq2+PVRqUqlNW9okt322mf3PkR2Z2Bio7axzp5QWRMSLwABgfeCpxTUUEVOb2bVpu3ooSZJ6rNmzZ5PJZHj44YfzZeussw5VVVXssMMOReyZupNSG3moe0b6h83srytfsZudW5IkqVk33XQTW2+9dYPgMGLECKZNm2ZwUEGV2shDSyK3be19DEU5d0ppmyYbyI5IDCpkpyRJUvf1xRdf8Mtf/pJzzz03X7bUUkvxxz/+kVNPPZWIWMzRUtuVWnio+3a/fzP7+zWq113OLUmS1MBLL71EJpPhoYceypd961vfoqqqih137IjbP6XSm7b0TG67cTP7N8ptm7snokPOHRFLAesBC8g+c0KSJKnD3HLLLWy99dYNgsO+++7L9OnTDQ7qUKUWHuqexTA8Ihr0PSJWAIYA84AHO+Dcd+e2ezWxbyjZVZ4mp5Q+74BzS5IkMX/+fH76058yYsQI3n//fSA7Tekvf/kLN910EyuvvHKRe6jurqTCQ0ppFjAeWBc4qdHus4HlgCtTSp8ARESfiNg091Tq9roOeAeoiIht6wojoi/w29yP/yzAeSRJkr7i5ZdfZujQofzlL3/Jl33zm99k0qRJnHbaad7foE5Ravc8AHwfmAxcEBFlZJdF3QHYjex0pV/Vq7tWbv9LZANHXkTsD+yf+/Hrue1OEXF57r/fSSn9pK5+SmluRBxHNkRMiIhK4D1gBNllXK8DqgrxBiVJkur773//y5FHHsl7772XL9tnn3244oorWGWVVYrYM/U0JRceUkqzct/8n0N2CtHewOvABcDZKaX3Fnd8PQOBIxuVrZ97QTZw/KT+zpTSjRExjGxAOQjoCzwP/Bi4oA1Pq5YkSWrR/Pnz+dWvfsWf//znfFnv3r35wx/+wGmnnUavXiU1iUTdQMmFB4CU0hzg6FbUm82XS6g23vdr4NdLcO77yQYWSZKkDjNnzhwqKiqYPHlyvmzttdemqqqKwYMHF7Fn6smMq5IkSV3MrbfeysCBAxsEh7333pvp06cbHFRUhgdJkqQuYv78+fziF79gn332yd/f0Lt3b/74xz9yyy23sOqqqxa5h+rpSnLakiRJUnfzyiuvUFFRwf33358vW2uttaisrGTnnXcuYs+kLznyIEmSVGS33XYbAwcObBAc9tprL2bMmGFwUJdieJAkSSqSBQsW8Mtf/pK9996bd999F/hyNaVx48Y5TUldjtOWJEmSiuDVV1+loqKC++67L1/2jW98g8rKSnbZZZci9kxqniMPkiRJnez2229n4MCBDYLDnnvuyYwZMwwO6tIMD5IkSZ1kwYIF/OpXv+K73/0u77zzDgC9evXi97//PbfeeiurrbZakXsoLZ7TliRJkjrBq6++yqhRo7j33nvzZWuuuSaVlZUMHTq0iD2TWs+RB0mSpA42fvx4tt566wbBYfjw4cyYMcPgoJJieJAkSeogCxYs4PTTT2evvfbi7bffBrLTlH77299y2223sfrqqxe5h1LbOG1JkiSpA7z22msccsghTJw4MV+25pprMmbMGIYNG1bEnklLzpEHSZKkArvzzjsZOHBgg+Cwxx57MH36dIODSprhQZIkqUAWLlzImWeeyZ577tlgmtI555zD7bffzhprrFHkHkrt47QlSZKkAnj99dc55JBDmDBhQr7s61//Otdeey277bZb8TomFZAjD5IkSe101113MXDgwAbBoaysjBkzZhgc1K0YHiRJkpbQwoULOeussxg+fDhvvfUWABHB2WefzR133OE0JXU7TluSJElaAm+88QaHHHII99xzT75sjTXW4Nprr2X33XcvYs+kjuPIgyRJUhvV1tYycODABsFh9913Z8aMGQYHdWuGB0mSpFZauHAhZ599Nt/5znd48803gew0pbPOOovx48fz9a9/vcg9lDqW05YkSZJa4c033+TQQw+ltrY2X7b66qtz7bXXUlZWVsSeSZ3HkQdJkqQW3HPPPQwcOLBBcNhtt92YMWOGwUE9iuFBkiSpGQsXLuScc85hjz324I033gCy05TOPPNM7rzzTtZcc80i91DqXE5bkiRJasKbb77JYYcdxl133ZUvW2211bjmmmv4zne+U8SeScVjeJAkSWpkwoQJjBo1Kj/aADBs2DCuvfZavvGNbxSxZ1JxOW1JkiQpZ9GiRfz2t7+lrKyswTSl008/nbvuusvgoB7PkQdJkiTgrbfe4rDDDuPOO+/Ml6222mpcffXVDB8+vIg9k7oOw4MkSerxJk6cyKhRo3j99dfzZUOHDmXMmDGONkj1OG1JkiT1WIsWLeJ3v/sdu+++e4Pg8Ktf/Yra2lqDg9SIIw+SJKlHevvttznssMMYP358vmzVVVfl6quvZs899yxiz6Suy/AgSZJ6nHvvvZeKigpee+21fNkuu+zCmDFjWGuttYrYM6lrc9qSJEnqMRYtWsQf/vAHdttttwbB4Ze//CV33323wUFqgSMPkiSpR3j77bc54ogjuP322/Nlq6yyCldffTV77bVXEXsmlQ7DgyRJ6vbuu+8+KioqePXVV/NlQ4YMobKykrXXXruIPZNKi9OWJElS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t/fvAg+mlD5touqTwAHAXe09pyRJ7TVnzhxGjRrF/fffny9ba621qKqqYsiQIUXsmSR1Xe0ODwAppZeBl1uo80ghziVJUnvddtttHH744bz77pczVPfaay+uuuoqVl111SL2TJK6NsdjJUk9xoIFC/jlL3/J3nvvnQ8OvXv35g9/+APjxo0zOEhSC9o18hARQ5fkuJTSpPacV5KktnrllVcYNWoU9913X75srbXWYsyYMeyyyy5F7JkklY72TluaQHZZ1rbq3c7zSpLUarfffjuHH34477zzTr5szz335KqrrmK11VYrYs8kqbQU4p6HBcCdwPsFaEuSpIJZsGABZ511Fr///e/zZb169eK3v/0tP//5z11NSZLaqL3h4UVgPWB3ss8+GO2UJElSV/Dqq68yatQo7r333nzZN77xDcaMGcPQoUs061aSerx2feWSUtoA+A5wC1AO3BMRT0XEaRHhXWeSpKK44447GDhwYIPgMHz4cKZPn25wkKR2aPd4bUqpNqWUAdYCfkb2Hog/A69ERFVE7NHec0iS1BoLFizg9NNP57vf/W7+/oa6aUq33XYbq6++epF7KEmlrSDPeQBIKb0L/BX4a0TsAhwPHAQcHBEvAgellB4t1PkkSarvtddeY9SoUUya9OXs2TXXXJMxY8YwbNiwIvZMkrqPDrlTLKV0b0rpcLL3QrxK9r6IdTriXJIk3XnnnQwcOLBBcPjOd77DjBkzDA6SVEAFDw8RsXREHBYRE4H7gbWB+4CnC30uSVLPtnDhQs4880z23HNP3n77bSA7Tek3v/mN05QkqQMUbNpSRGwJ/C9wKLAS8A5wHtkVmJ4p1HkkSQJ4/fXXOeSQQ5gwYUK+7Otf/zpjxoxh1113LVq/JKk7a+8TppcDRgHHAdvmiu8GRgM3pJTmt697kiR91V133cWhhx7KW2+9lS8rKyvjmmuuYY011ihizySpe2vvtKU3gIvJTk36A7BBSuk7KaVqg4MkqdAWLlzIWWedxfDhw/PBISI4++yzueOOOwwOktTB2jttaTlgPvASMBQYGhEtHZNSSt69JklqkzfeeINDDjmEe+65J1+2xhprcO2117L77rsXsWeS1HMU4p6HPsCObaifCnBOSVIPUltby6GHHsqbb76ZL9t999255ppr+PrXv17EnklSz9Le8LBeQXohSVITFi5cyG9/+1vOPvtsUsp+9xQRnHXWWZx++un07t27yD2UpJ6lXeEhpfRSoToiSVJ9b7zxBoceeih33313vmz11Vfn2muvpaysrIg9k6Seq0MeErc4EbFaZ59TklRa7rnnHrbeeusGwWG33XZjxowZBgdJKqJOCw8R0T8ifg/M6qxzSpJKy8KFCznnnHPYY489eOONN4DsNKUzzzyTO++8kzXXXLPIPZSknq0gD4mLiHWAbciuvPRwSunNevv6AqcCPyH78LhPC3FOSVL38uabb3LYYYdx11135ctWX311rrnmGvbYY48i9kySVKfdIw8RcQHZ0YQa4EZgdkR8P7dvV+AZ4LfAMsDfgPXbe05JUvcyYcIEBg4c2CA4DBs2jOnTpxscJKkLaVd4iIgjgR/kfnwKeJrs0q0X5PbdDnyD7IPkNkwpnZpSeqvJxiRJPU7dakplZWUNpimdccYZ3HXXXXzjG98ocg8lSfW1d9rSUcAXwG4ppQcAImIocCdwKfAKsG9K6fF2nkeS1M289dZbHHbYYdx55535stVWW42rr76a4cOHF7FnkqTmtHfa0pbADXXBASClNIns9KUAjjE4SJIamzhxIgMHDmwQHIYOHcqMGTMMDpLUhbU3PPQHnm+i/Lnc9oEm9kmSeqhFixbxu9/9jt13353XX38dyE5T+tWvfkVtba3TlCSpi2vvtKVeZFdYamw+QEppXjvblyR1E2+//TaHHXYY48ePz5etuuqqXH311ey5555F7JkkqbUKsVRrKkAbkqRubNKkSYwaNYrXXnstX7bLLrswZswY1lprrSL2TJLUFoV4SNyvI2Jh/RdwJkDj8txrQQHOKUkqAYsWLeIPf/gDu+22W4Pg8H//93/cfffdBgdJKjGFGHmIDq4vSSpBb7/9NkcccQS33357vmyVVVbh6quvZq+99ipizyRJS6pd4SGlVIiRC0lSN3PfffdRUVHBq6++mi/beeedGTNmDGuvvXYReyZJag8//EuSCmbRokX8v//3/9h1110bBIdf/OIX3HPPPQYHSSpxhZi2JEkS77zzDkcccQS33XZbvmyVVVbhyiuvZO+99y5izyRJhWJ4kCS12/33308mk2kw2jB48GAqKyv55je/WcSeSZIKyWlLkqQltmjRIv70pz8xbNiwBsHhZz/7GRMmTDA4SFI348iDJGmJvPvuuxx55JGMGzcuX7byyitz5ZVXss8++xSxZ5KkjmJ4kCS12eTJk8lkMrzyyiv5sp122omqqipHGySpG3PakiSp1RYtWsSf//xnhg4d2iA4/PSnP2XixIkGB0nq5hx5kCTlzZw5k9raWubOnUu/fv0oKytjwIABQHaa0lFHHcV///vffP2VVlqJK664gn333bdYXZYkdSLDgySJ2tpazjnnHCZNmvSVfUOHDuXggw/mz3/+M3PmzMmX77jjjlRVVfGtb32rM7sqSSoiw4Mk9XCXXnopxx9/PIsWLWpy/6RJk74SKk477TT+8Ic/0KdPn87ooiSpizA8SFIPVltbu9jg0Njyyy/PNddcw4gRIzq4Z5KkrsgbpiWpBzvnnHNaHRwABgwYYHCQpB7M8CBJPdTMmTObvMdhcR566CFmzpzZQT2SJHV1hgdJ6qFqa2s79ThJUukzPEhSD/TOO+8scQiYO3dugXsjSSoV3jAtST3EBx98wI033khVVRV33XUXCxYsWKJ2+vXrV+CeSZJKRUmOPETE2hFxWUS8FhGfR8TsiDg/IlbqzHYi4tKISLnXhkv2biSp43z88cdce+217LfffqyxxhocffTR3H777UscHADKysoK2ENJUikpuZGHiNgAmAysDtwEPA1sD5wC7BURQ1JK73Z0OxGxL3AM8DGwfLvelCQV0Lx587j11luprKxk3LhxzJs3r8l6O+20E2+99RazZs1qddvDhg3LP3FaktTzlFx4AC4i+4H/5JTShXWFEXEucCrwO+CEjmwnIlYDRgNVwNeBYUv0TiSpQD7//HPGjx9PVVUVN910Ex9//HGT9bbZZhsymQwjR45knXXWoba2luHDh7dqudZevXpxxhlnFLrrkqQSEimlYveh1SJifWAWMBvYIKW0qN6+FYDXgQBWTyl90lHtRMQNwE7AAGAs2fCwUUrp+Xa+v6mDBg0aNHXq1PY0I6mHmD9/PnfffTdVVVVcf/31fPjhh03W22KLLaioqCCTybDhhl+dYdnSE6YhGxxGjx7NMcccU7D+S5KKZ5tttmHatGnTUkrbtOW4Uht52D23HV//Az9ASumjiLgfGA7sCCxuGZElbicijgL2Bw5IKb0bEUv4ViSp7RYuXMikSZOoqqpi7NixvPPOO03W23jjjclkMmQymRanGR177LGsu+66/OY3v2HixIlf2T9s2DDOOOMM73WQ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dVZZZRUOOuggMpkMw4YNo3fv3p3cS0mSVCiGB0ltMmvWrHxgePzxx5us079/fw444AAymQxlZWX06dOnk3spSZI6guFBUotefvllqqurqaysZOrUqU3WWW655dhvv/3IZDLsueeeLL300p3cS0mS1NEMD5Ka9Prrr1NTU0NVVRWTJ09usk7fvn3ZZ599qKioYO+992bZZZft5F5KkqTOZHiQlPf2228zduxYqqqqmDhxIimlr9Tp06cPe+21F5lMhhEjRrDCCisUoaeSJKkYDA9SD/f+++9z4403UllZSW1tLQsXLvxKnd69e7PHHnuQyWTYf//9WWmllYrQU0mSVGyGB6kH+uijj7j55puprKzkjjvuYP78+V+pExHsuuuuZDIZDjzwQFZbbbUi9FSSJHUlhgeph/j0008ZN24cVVVVjBs3js8++6zJekOGDCGTyXDwwQez5pprdnIvJUlSV2Z4kLqxzz//nNtvv52qqipuvvlmPvnkkybrbbvttlRUVFBeXs63vvWtTu6lJEkqFYYHqZuZP38+d911F1VVVdxwww3MnTu3yXpbbrklFRUVjBw5kg022KCTeylJkkqR4UHqBhYuXMjEiROprKzk+uuv5913322y3qabbkomkyGTybDZZpt1ci8lSVKpMzxIJWrRokVMnjyZyspKrrvuOt58880m662//vr5wLDlllsSEZ3cU0mS1F0YHqQSklLikUceoaqqiurqal555ZUm633zm99k5MiRZDIZtt12WwODJEkqCMOD1MWllHj00UepqqqiqqqKF198scl6a6yxRj4w7LTTTvTq1auTeypJkro7w4PUQWbOnEltbS1z586lX79+lJWVMWDAgFYf/+STT1JVVUVlZSXPPvtsk3VWWWUVDj74YDKZDEOHDqV3796F6r4kSdJXGB6kAqutreWcc85h0qRJX9k3dOhQzjzzTMrKypo89vnnn8+PMDz++ONN1unfvz8HHHAAFRUV7L777vTp06eg/ZckSWqO4UEqoEsvvZTjjz+eRYsWNbl/0qRJDB8+nNGjR3PMMccA8NJLL1FdXU1VVRVTp05t8rjllluO/fbbj0wmw5577snSSy/dYe9BkiSpOYYHqUBqa2sXGxzqLFq0iOOOO46pU6cyffp0HnjggSbr9e3bl//5n/8hk8mw9957s+yyy3ZEtyVJklrN8CAV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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"image/png": { | |
"height": 261, | |
"width": 391 | |
}, | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"%config InlineBackend.figure_format = 'retina'\n", | |
"\n", | |
"plt.plot(warp_mem_limits, residuals, 'ko-')\n", | |
"plt.xlabel('Warp Mem Limit (Mb)')\n", | |
"plt.ylabel('RMSE (m)');" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "8a0b0178-fe6c-4b0b-b80b-1779a31023d6", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5d8db3f250>\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 0x7f5d8db3f280> created\n", | |
"DEBUG:rasterio._filepath:Installing FilePath filesystem handler plugin...\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 0x7f5d8db3f280>.\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5d8db3f250>\n", | |
"DEBUG:rasterio._base:Sharing flag: 0\n", | |
"DEBUG:rasterio._base:Nodata success: 1, Nodata value: -32768.000000\n", | |
"DEBUG:rasterio._base:Dataset <open DatasetReader name='epsg7661_gdal351_srtm.tif' mode='r'> is started.\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5d8db3f250>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3f280> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3f280>.\n", | |
"DEBUG:rasterio.env:Exiting outermost env\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5d8db3f250>\n", | |
"DEBUG:rasterio._io:Output nodata value read from file: -32768.0\n", | |
"DEBUG:rasterio._io:Output nodata values: [-32768.0]\n", | |
"DEBUG:rasterio._io:all_valid: False\n", | |
"DEBUG:rasterio._io:mask_flags: ([<MaskFlags.nodata: 8>],)\n", | |
"DEBUG:rasterio._io:Jump straight to _read()\n", | |
"DEBUG:rasterio._io:Window: None\n", | |
"DEBUG:rasterio._io:IO window xoff=0.0 yoff=0.0 width=3601.0 height=3601.0\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5e08c1c160>\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 0x7f5d8db3ceb0> 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 0x7f5d8db3ceb0>.\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5d8db3ce80>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5d8db3ce80>\n", | |
"DEBUG:rasterio._base:Sharing flag: 0\n", | |
"DEBUG:rasterio._env:CPLE_None in HTTP: libcurl/7.83.1 OpenSSL/1.1.1q zlib/1.2.12 libssh2/1.10.0 nghttp2/1.47.0\n", | |
"DEBUG:rasterio._env:CPLE_None in VSICURL: GetFileSize(https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif)=17280892 response_code=200\n", | |
"DEBUG:rasterio._env:CPLE_None in VSICURL: Downloading 0-16383 (https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif)...\n", | |
"DEBUG:rasterio._env:CPLE_None in VSICURL: Got response_code=206\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(/vsicurl/https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif, this=0x55bcd0fdc4a0) succeeds as GTiff.\n", | |
"DEBUG:rasterio._base:Nodata success: 1, Nodata value: -32768.000000\n", | |
"DEBUG:rasterio._base:Dataset <open DatasetReader name='https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif' mode='r'> is started.\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5d8db3ce80>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0>.\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> 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 0x7f5d8db3ceb0>.\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5d8db3ce80>\n", | |
"DEBUG:rasterio._io:Output nodata value read from file: -32768.0\n", | |
"DEBUG:rasterio._io:Output nodata values: [-32768.0]\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: ScanDirectories()\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 1801x1801 overview.\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 901x901 overview.\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 451x451 overview.\n", | |
"DEBUG:rasterio._io:all_valid: False\n", | |
"DEBUG:rasterio._io:mask_flags: ([<MaskFlags.nodata: 8>],)\n", | |
"DEBUG:rasterio._io:Jump straight to _read()\n", | |
"DEBUG:rasterio._io:Window: None\n", | |
"DEBUG:rasterio._io:IO window xoff=0.0 yoff=0.0 width=3601.0 height=3601.0\n", | |
"DEBUG:rasterio._env:CPLE_None in VSICURL: Downloading 5046272-17280891 (https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif)...\n", | |
"DEBUG:rasterio._env:CPLE_None in VSICURL: Got response_code=206\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=\"3601\" rasterXSize=\"3601\"><VRTRasterBand /><SRS>COMPD_CS[\"WGS 84 + EGM96 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[\"EGM96 height\",VERT_DATUM[\"EGM96 geoid\",2005,AUTHORITY[\"EPSG\",\"5171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"5773\"]],AUTHORITY[\"EPSG\",\"9707\"]]</SRS><GeoTransform>-109.00013888888888,0.000277777777777779,0.0,40.00013888888889,0.0,-0.00027777777777777707</GeoTransform></VRTDataset>, this=0x55bcd21aedc0) succeeds as VRT.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: Computing area of interest: -109, 38.9999, -108, 40.0001\n", | |
"DEBUG:rasterio._env:CPLE_None in OGRCT: Wrap source at -108.5.\n", | |
"DEBUG:rasterio._warp:Created exact transformer\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(<VRTDataset rasterYSize=\"3601\" rasterXSize=\"3601\"><VRTRasterBand /><SRS>COMPD_CS[\"WGS 84 + EGM96 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[\"EGM96 height\",VERT_DATUM[\"EGM96 geoid\",2005,AUTHORITY[\"EPSG\",\"5171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"5773\"]],AUTHORITY[\"EPSG\",\"9707\"]]</SRS><GeoTransform>-109.00013888888888,0.000277777777777779,0.0,40.00013888888889,0.0,-0.00027777777777777707</GeoTransform></VRTDataset>, this=0x55bcd21aedc0)\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5d8db3cee0>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5d8db3cee0>\n", | |
"DEBUG:rasterio._io:Path: _UnparsedPath(path='epsg7661_rio13_srtm.tif'), mode: w, driver: GTiff\n", | |
"INFO:rasterio._env:GDAL signalled an error: err_no=4, msg='epsg7661_rio13_srtm.tif: No such file or directory'\n", | |
"DEBUG:rasterio._io:Skipped delete for overwrite, dataset does not exist: 'epsg7661_rio13_srtm.tif'\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALDriver::Create(GTiff,epsg7661_rio13_srtm.tif,3601,3601,1,Float32,(nil))\n", | |
"DEBUG:rasterio._base:Nodata success: 1, Nodata value: -32768.000000\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5d8db3cee0>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0>.\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> 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 0x7f5d8db3ceb0>.\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5d8db3cee0>\n", | |
"DEBUG:rasterio._io:Path: _UnparsedPath(path='MEM:::DATAPOINTER=140039564554256,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Int16'), mode: r+, driver: None\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(MEM:::DATAPOINTER=140039564554256,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Int16, this=0x55bcd2254cd0) succeeds as MEM.\n", | |
"DEBUG:rasterio._base:Nodata success: 0, Nodata value: 0.000000\n", | |
"DEBUG:rasterio._io:Path: _UnparsedPath(path='MEM:::DATAPOINTER=140039590490128,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Float64'), mode: r+, driver: None\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(MEM:::DATAPOINTER=140039590490128,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Float64, this=0x55bcd0a98830) succeeds as MEM.\n", | |
"DEBUG:rasterio._base:Nodata success: 0, Nodata value: 0.000000\n", | |
"DEBUG:rasterio._warp:Created temp destination dataset.\n", | |
"DEBUG:rasterio._warp:Set _reproject Transformer option b'APPLY_VERTICAL_SHIFT'=b'TRUE'\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: Computing area of interest: -109, 38.9999, -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:Warp Memory Limit set: 128\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, 3601, 3601.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=0,0,3601x1800 Dst=0,0,3601x1800\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=0,1800,3601x1801 Dst=0,1800,3601x1801\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(Temporary destination dataset for _reproject(), this=0x55bcd0a98830)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(MEM:::DATAPOINTER=140039564554256,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Int16, this=0x55bcd2254cd0)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(epsg7661_rio13_srtm.tif, this=0x55bcd21ae780)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(/vsicurl/https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif, this=0x55bcd0fdc4a0)\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3ceb0>.\n", | |
"DEBUG:rasterio.env:Exiting outermost env\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5e08c1c160>\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 0x7f5d8db3cee0> 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 0x7f5d8db3cee0>.\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5d8db3f280>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5d8db3f280>\n", | |
"DEBUG:rasterio._base:Sharing flag: 0\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(/vsicurl/https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif, this=0x55bcd0fdc4a0) succeeds as GTiff.\n", | |
"DEBUG:rasterio._base:Nodata success: 1, Nodata value: -32768.000000\n", | |
"DEBUG:rasterio._base:Dataset <open DatasetReader name='https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif' mode='r'> is started.\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5d8db3f280>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3cee0>.\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> 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 0x7f5d8db3cee0>.\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5d8db3f280>\n", | |
"DEBUG:rasterio._io:Output nodata value read from file: -32768.0\n", | |
"DEBUG:rasterio._io:Output nodata values: [-32768.0]\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: ScanDirectories()\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 1801x1801 overview.\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 901x901 overview.\n", | |
"DEBUG:rasterio._env:CPLE_None in GTiff: Opened 451x451 overview.\n", | |
"DEBUG:rasterio._io:all_valid: False\n", | |
"DEBUG:rasterio._io:mask_flags: ([<MaskFlags.nodata: 8>],)\n", | |
"DEBUG:rasterio._io:Jump straight to _read()\n", | |
"DEBUG:rasterio._io:Window: None\n", | |
"DEBUG:rasterio._io:IO window xoff=0.0 yoff=0.0 width=3601.0 height=3601.0\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=\"3601\" rasterXSize=\"3601\"><VRTRasterBand /><SRS>COMPD_CS[\"WGS 84 + EGM96 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[\"EGM96 height\",VERT_DATUM[\"EGM96 geoid\",2005,AUTHORITY[\"EPSG\",\"5171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"5773\"]],AUTHORITY[\"EPSG\",\"9707\"]]</SRS><GeoTransform>-109.00013888888888,0.000277777777777779,0.0,40.00013888888889,0.0,-0.00027777777777777707</GeoTransform></VRTDataset>, this=0x55bcd21aedc0) succeeds as VRT.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: Computing area of interest: -109, 38.9999, -108, 40.0001\n", | |
"DEBUG:rasterio._warp:Created exact transformer\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(<VRTDataset rasterYSize=\"3601\" rasterXSize=\"3601\"><VRTRasterBand /><SRS>COMPD_CS[\"WGS 84 + EGM96 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[\"EGM96 height\",VERT_DATUM[\"EGM96 geoid\",2005,AUTHORITY[\"EPSG\",\"5171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Gravity-related height\",UP],AUTHORITY[\"EPSG\",\"5773\"]],AUTHORITY[\"EPSG\",\"9707\"]]</SRS><GeoTransform>-109.00013888888888,0.000277777777777779,0.0,40.00013888888889,0.0,-0.00027777777777777707</GeoTransform></VRTDataset>, this=0x55bcd21aedc0)\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5d8db3cd30>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5d8db3cd30>\n", | |
"DEBUG:rasterio._io:Path: _UnparsedPath(path='epsg7661_rio13_srtm.tif'), mode: w, driver: GTiff\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(epsg7661_rio13_srtm.tif, this=0x55bcd21ae780) succeeds as GTiff.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(epsg7661_rio13_srtm.tif, this=0x55bcd21ae780)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(epsg7661_rio13_srtm.tif, this=0x55bcd21ae780) succeeds as GTiff.\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALDefaultOverviews::OverviewScan()\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(epsg7661_rio13_srtm.tif, this=0x55bcd21ae780)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALDriver::Create(GTiff,epsg7661_rio13_srtm.tif,3601,3601,1,Float32,(nil))\n", | |
"DEBUG:rasterio._base:Nodata success: 1, Nodata value: -32768.000000\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5d8db3cd30>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3cee0>.\n", | |
"DEBUG:rasterio.env:No GDAL environment exists\n", | |
"DEBUG:rasterio.env:New GDAL environment <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> 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 0x7f5d8db3cee0>.\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5d8db3cd30>\n", | |
"DEBUG:rasterio._io:Path: _UnparsedPath(path='MEM:::DATAPOINTER=94269576473808,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Int16'), mode: r+, driver: None\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(MEM:::DATAPOINTER=94269576473808,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Int16, this=0x55bcd2254cd0) succeeds as MEM.\n", | |
"DEBUG:rasterio._base:Nodata success: 0, Nodata value: 0.000000\n", | |
"DEBUG:rasterio._io:Path: _UnparsedPath(path='MEM:::DATAPOINTER=140039486750736,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Float64'), mode: r+, driver: None\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALOpen(MEM:::DATAPOINTER=140039486750736,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Float64, this=0x55bcd0a98830) succeeds as MEM.\n", | |
"DEBUG:rasterio._base:Nodata success: 0, Nodata value: 0.000000\n", | |
"DEBUG:rasterio._warp:Created temp destination dataset.\n", | |
"DEBUG:rasterio._warp:Set _reproject Transformer option b'APPLY_VERTICAL_SHIFT'=b'TRUE'\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: Computing area of interest: -109, 38.9999, -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:Warp Memory Limit set: 64\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, 3601, 3601.\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,1801x1800 Dst=1800,0,1801x1800\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=0,1800,1800x1801 Dst=0,1800,1800x1801\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALWarpKernel()::GWKRealCase() Src=1800,1800,1801x1801 Dst=1800,1800,1801x1801\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(Temporary destination dataset for _reproject(), this=0x55bcd0a98830)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(MEM:::DATAPOINTER=94269576473808,PIXELS=3601,LINES=3601,BANDS=1,DATATYPE=Int16, this=0x55bcd2254cd0)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(epsg7661_rio13_srtm.tif, this=0x55bcd21ae780)\n", | |
"DEBUG:rasterio._env:CPLE_None in GDAL: GDALClose(/vsicurl/https://opentopography.s3.sdsc.edu/raster/SRTM_GL1/SRTM_GL1_srtm/N39W109.tif, this=0x55bcd0fdc4a0)\n", | |
"DEBUG:rasterio.env:Exiting env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Cleared existing <rasterio._env.GDALEnv object at 0x7f5d8db3cee0> options\n", | |
"DEBUG:rasterio._env:Stopped GDALEnv <rasterio._env.GDALEnv object at 0x7f5d8db3cee0>.\n", | |
"DEBUG:rasterio.env:Exiting outermost env\n", | |
"DEBUG:rasterio.env:Exited env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5e08c1c160>\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 0x7f5d8db3cd90> 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 0x7f5d8db3cd90>.\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5e08c1c160>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3cd90> options\n", | |
"DEBUG:rasterio.env:Entering env context: <rasterio.env.Env object at 0x7f5d8db3f280>\n", | |
"DEBUG:rasterio.env:Got a copy of environment <rasterio._env.GDALEnv object at 0x7f5d8db3cd90> options\n", | |
"DEBUG:rasterio.env:Entered env context: <rasterio.env.Env object at 0x7f5d8db3f280>\n" | |
] | |
} | |
], | |
"source": [ | |
"!head -n 220 rasterio.log" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "2633a0a5-9f1b-4684-b947-412492370906", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"GDAL 3.5.1, released 2022/06/30\n" | |
] | |
} | |
], | |
"source": [ | |
"!gdalinfo --version" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "1d4570cb-89b8-4b8d-b1a3-0870626c01f4", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Rel. 9.0.1, June 15th, 2022\n", | |
"usage: proj [-bdeEfiIlmorsStTvVwW [args]] [+opt[=arg] ...] [file ...]\n" | |
] | |
} | |
], | |
"source": [ | |
"!proj" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "33742b8b-1044-4d86-8b8b-3c6eadcb014d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"3.11.0\n" | |
] | |
} | |
], | |
"source": [ | |
"!geos-config --version" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"id": "e9910b9d-2655-47aa-88ed-933b0132c366", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"rasterio info:\n", | |
" rasterio: 1.3.0\n", | |
" GDAL: 3.5.1\n", | |
" PROJ: 9.0.1\n", | |
" GEOS: 3.11.0\n", | |
" PROJ DATA: /srv/conda/envs/notebook/share/proj\n", | |
" GDAL DATA: /srv/conda/envs/notebook/share/gdal\n", | |
"\n", | |
"System:\n", | |
" python: 3.10.5 | packaged by conda-forge | (main, Jun 14 2022, 07:04:59) [GCC 10.3.0]\n", | |
"executable: /srv/conda/envs/notebook/bin/python\n", | |
" machine: Linux-5.4.172-90.336.amzn2.x86_64-x86_64-with-glibc2.27\n", | |
"\n", | |
"Python deps:\n", | |
" affine: 2.3.1\n", | |
" attrs: 21.4.0\n", | |
" certifi: 2022.06.15\n", | |
" click: 8.1.3\n", | |
" cligj: 0.7.2\n", | |
" cython: None\n", | |
" numpy: 1.22.4\n", | |
" snuggs: 1.4.7\n", | |
"click-plugins: None\n", | |
"setuptools: 63.1.0\n" | |
] | |
} | |
], | |
"source": [ | |
"!rio --show-versions" | |
] | |
} | |
], | |
"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.10.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment