{ "cells": [ { "cell_type": "markdown", "id": "aa4494d3-6ac5-41b2-a1eb-e42a1c63115d", "metadata": { "tags": [] }, "source": [ "# Alonso Gonzalez: Stream Network Abstraction\n", "\n", "[Presentation](http://spatial-ecology.net/docs/source/STUDENTSPROJECTS/Proj_2022_Matera/Stream_Network_Abstraction_Alonso_Gonzalez.pdf) \n", "[Video Recording](https://youtu.be/fOEBNDqoYvI)" ] }, { "cell_type": "code", "execution_count": null, "id": "5e19cefd-9b0a-4ccd-aa87-74ed00951086", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%bash\n", "cd /home/user/my_SE_data/exercise" ] }, { "cell_type": "code", "execution_count": null, "id": "a0461c7e-1c7c-4725-8e24-4d175a1d7450", "metadata": {}, "outputs": [], "source": [ "grass78 -text grassdb/europe/PERMANENT/ <...\n", "Cleaning up temporary files...\n", "\n", " __________ ___ __________ _______________\n", " / ____/ __ \\/ | / ___/ ___/ / ____/ _/ ___/\n", " / / __/ /_/ / /| | \\__ \\\\_ \\ / / __ / / \\__ \\\n", " / /_/ / _, _/ ___ |___/ /__/ / / /_/ // / ___/ /\n", " \\____/_/ |_/_/ |_/____/____/ \\____/___//____/\n", "\n", "Welcome to GRASS GIS 7.8.5\n", "GRASS GIS homepage: https://grass.osgeo.org\n", "This version running through: Bash Shell (/bin/bash)\n", "Help is available with the command: g.manual -i\n", "See the licence terms with: g.version -c\n", "See citation options with: g.version -x\n", "Start the GUI with: g.gui wxpython\n", "When ready to quit enter: exit\n", "\n", "corrupted size vs. prev_size while consolidating\n", "/bin/bash: line 5: 15762 Aborted (core dumped) r.external input=geodata/dem/SA_elevation_mn_GMTED2010_mn_msk.tif output=elv --o --q\n", "/bin/bash: line 6: 15768 Segmentation fault (core dumped) r.external input=geodata/dem/SA_all_dep_1km.tif output=dep --o --q\n", "double free or corruption (!prev)\n", "/bin/bash: line 7: 15775 Aborted (core dumped) r.external input=geodata/dem/SA_are_1km_msk.tif output=are --o --q\n", "free(): invalid pointer\n", "/bin/bash: line 8: 15781 Aborted (core dumped) r.external input=geodata/mask/msk_1km.tif output=msk --o --q\n", "free(): invalid pointer\n", "WARNING: Subprocess failed with exit code 6\n", "free(): invalid pointer\n", "/bin/bash: line 12: 15841 Aborted (core dumped) r.stream.extract elevation=elv accumulation=flow depression=dep threshold=8 direction=dir_rs stream_raster=stream memory=2000 --o --q\n", "WARNING: MASK already exists and will be overwritten\n", "free(): invalid pointer\n", "WARNING: Subprocess failed with exit code 6\n", "free(): invalid pointer\n", "/bin/bash: line 12: 16095 Aborted (core dumped) r.stream.extract elevation=elv accumulation=flow depression=dep threshold=8 direction=dir_rs stream_raster=stream memory=2000 --o --q\n", "WARNING: MASK already exists and will be overwritten\n", "free(): invalid pointer\n", "WARNING: Subprocess failed with exit code 6\n", "free(): invalid pointer\n", "/bin/bash: line 12: 16272 Aborted (core dumped) r.stream.extract elevation=elv accumulation=flow depression=dep threshold=8 direction=dir_rs stream_raster=stream memory=2000 --o --q\n", "WARNING: Failed to start shell '/bin/bash'\n", "Cleaning up temporary files...\n", "Done.\n", "\n", "Goodbye from GRASS GIS\n", "\n" ] } ], "source": [ "%%bash\n", "\n", "cd /home/user/my_SE_data/exercise\n", "grass78 -f -text --tmp-location -c geodata/dem/SA_elevation_mn_GMTED2010_mn_msk.tif <<'EOF'\n", "\n", "g.gisenv set=\"GRASS_VERBOSE=-1\",\"DEBUG=0\"\n", "\n", "## import the layers\n", "r.external input=geodata/dem/SA_elevation_mn_GMTED2010_mn_msk.tif output=elv --o --q # dem\n", "r.external input=geodata/dem/SA_all_dep_1km.tif output=dep --o --q # depression\n", "r.external input=geodata/dem/SA_are_1km_msk.tif output=are --o --q # area-pixel\n", "r.external input=geodata/mask/msk_1km.tif output=msk --o --q # land-ocean mask\n", "\n", "g.region -m\n", "\n", "for tile in 1 2 3 ; do # loop for each tile\n", "r.mask raster=msk --o --q # usefull to mask the flow accumulation\n", "\n", "# extract tile extent from the tilesComp.shp\n", "wL=$(ogrinfo -al -where \" id = '$tile' \" geodata/shp/tilesComp.shp | grep POLYGON | awk '{ gsub(/[(()),]/,\" \",$0 ); print $2 }')\n", "nL=$(ogrinfo -al -where \" id = '$tile' \" geodata/shp/tilesComp.shp | grep POLYGON | awk '{ gsub(/[(()),]/,\" \",$0 ); print $3 }')\n", "eL=$(ogrinfo -al -where \" id = '$tile' \" geodata/shp/tilesComp.shp | grep POLYGON | awk '{ gsub(/[(()),]/,\" \",$0 ); print $4 }')\n", "sL=$(ogrinfo -al -where \" id = '$tile' \" geodata/shp/tilesComp.shp | grep POLYGON | awk '{ gsub(/[(()),]/,\" \",$0 ); print $7 }')\n", "\n", "g.region w=$wL n=$nL s=$sL e=$eL res=0:00:30 --o\n", "g.region -m\n", "\n", "### maximum ram 66571M for 2^63 -1 (2 147 483 647 cell) / 1 000 000 * 31 M\n", "#### -m Enable disk swap memory option: Operation is slow\n", "#### -b Beautify flat areas\n", "#### threshold=1 = ~1 km2 = 0.9 m2\n", "\n", "echo \"############# compute the flow accumulation using MFD for tile $tile ##############\"\n", "r.watershed -b elevation=elv depression=dep accumulation=flow drainage=dir_rw flow=are memory=2000 --o --q\n", "\n", "echo \"############# extract stream ##################\"\n", "r.stream.extract elevation=elv accumulation=flow depression=dep threshold=8 direction=dir_rs stream_raster=stream memory=2000 --o --q\n", "\n", "\n", "done\n", "\n", "EOF\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "df559b96-925e-4b8a-9df5-6a0484101fff", "metadata": {}, "outputs": [], "source": [ "import rasterio\n", "from rasterio.merge import merge\n", "from rasterio.plot import show\n", "import glob\n", "import os" ] }, { "cell_type": "code", "execution_count": 11, "id": "ebcdf67b-721c-43a4-ba80-da195133de17", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/user/my_SE_data/exercise/geodata/dem/flow_*.tif\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Creates the route to grab documents\n", "dirpath = r\"/home/user/my_SE_data/exercise/geodata/dem/\"\n", "out_fp = r\"/home/user/my_SE_data/exercise/geodata/dem/CurrentsLA.tif\"\n", "# Make a search criteria to select the DEM files\n", "search_criteria = \"flow_*.tif\"\n", "q = os.path.join(dirpath, search_criteria)\n", "print(q)\n", "#________________________________________________________________________________________#\n", "#________________________________________________________________________________________#\n", "#________________________________________________________________________________________#\n", "#Creates an array of objects to merge\n", "dem_fps = glob.glob(q)\n", "dem_fps\n", "#________________________________________________________________________________________#\n", "#________________________________________________________________________________________#\n", "#________________________________________________________________________________________#\n", "#Create a list of files to append\n", "src_files_to_mosaic = []\n", "for fp in dem_fps:\n", " src = rasterio.open(fp)\n", " src_files_to_mosaic.append(src)\n", " \n", "mosaic, out_trans = merge(src_files_to_mosaic)\n", "show(mosaic, cmap='terrain')\n", "\n", "out_meta = src.meta.copy()\n", "out_meta.update({\"driver\": \"GTiff\",\n", " \"height\": mosaic.shape[1],\n", " \"width\": mosaic.shape[2],\n", " \"transform\": out_trans,\n", " \"crs\": \"epsg:4326\"\n", " }\n", " )\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "8f155582-8aec-46b6-ba2c-dabc43dcd3e0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "src_files_to_mosaic\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "c822286f-1a88-4d40-ad05-7d811bcd8766", "metadata": {}, "outputs": [], "source": [ "with rasterio.open(out_fp, \"w\", **out_meta) as dest:\n", " dest.write(mosaic)\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "05b4ff2f-9370-4ee6-98ba-aad6207cb685", "metadata": {}, "outputs": [], "source": [ "import rasterio\n", "import rasterio.plot\n", "import pyproj\n", "import numpy as np\n", "import matplotlib\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 32, "id": "e9a3ded8-3d98-4f00-8fce-7239390da94c", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Row #')" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "window = rasterio.windows.Window(0, 200, 900, 1100)\n", "\n", "with rasterio.open('/home/user/my_SE_data/exercise/geodata/dem/CurrentsLA.tif') as src:\n", " subset = src.read(1, window=window)\n", "\n", "plt.figure(figsize=(6,10))\n", "plt.imshow(subset)\n", "plt.colorbar(shrink=0.5)\n", "#plt.title(f'Band 4 Subset\\n{window}')\n", "plt.xlabel('Column #')\n", "plt.ylabel('Row #')" ] }, { "cell_type": "code", "execution_count": null, "id": "4d010bf0-19e7-4140-b8d7-f16fcbb5439a", "metadata": {}, "outputs": [], "source": [] } ], "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }