Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import salem\n",
"import matplotlib.pyplot as plt\n",
"import geopandas as gpd\n",
"import numpy as np\n",
"from subprocess import Popen\n",
"import os\n",
"from oggm import utils"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"dem_full = 'Alaska_albers_V3.tif'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Make a shapefile with the tiles in the original projection "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[-1826439.1592820566,\n",
" 2031800.8407179434,\n",
" -51.90425149630755,\n",
" 2664488.0957485037]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds = salem.GeoTiff(dem_full)\n",
"ds.grid.extent"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### We make a grid slightly larger so that we can properly divide it in nice boxes"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[-1827000.0, 2073000.0, -35000.0, 2665000.0]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid = salem.Grid(x0y0=(-1827000, 2665000), dxdy=(ds.grid.dx, ds.grid.dy), nxny=(130000, 90000), \n",
" proj=ds.grid.proj, pixel_ref='corner')\n",
"grid = grid.center_grid\n",
"grid.extent"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10000"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from math import gcd\n",
"gcd(grid.nx, grid.ny)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<salem.Grid>\n",
" proj: +datum=NAD83 +lat_0=50 +lat_1=55 +lat_2=65 +lon_0=-154 +no_defs+proj=aea +units=m +x_0=0 +y_0=0\n",
" pixel_ref: center\n",
" origin: upper-left\n",
" (nx, ny): (13, 9)\n",
" (dx, dy): (300000.0, -300000.0)\n",
" (x0, y0): (-1677000.0, 2515000.0)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr_grid = grid.regrid(nx=grid.nx / 10000, ny=grid.ny / 10000)\n",
"lr_grid"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"117"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"geom = lr_grid.to_geometry()\n",
"geom['tile'] = ['{:03d}_{:03d}'.format(i, j) for i, j in zip(geom.i, geom.j)]\n",
"len(geom)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### We keep only the tiles which are relevant to glaciers to save space "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"rgi = gpd.read_file('/home/mowglie/disk/Data/GIS/SHAPES/RGI/RGI_V6/01_rgi60_Alaska/01_rgi60_Alaska.shp')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"rgi = rgi.to_crs(geom.crs)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"rgi['geometry'] = rgi.buffer(50000)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"rgi = rgi.dissolve(by='O1Region')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"rgi.to_file('/home/mowglie/rgibuf_diss.shp')"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"geom = geom.loc[geom.geometry.intersects(rgi.unary_union)]"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"geom.plot();"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"geom.to_file('Alaska_albers_V3_tiles.shp')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Apply GDAL "
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"37\n",
"005_001_Alaska_albers_V3\n",
"006_001_Alaska_albers_V3\n",
"007_001_Alaska_albers_V3\n",
"005_002_Alaska_albers_V3\n",
"006_002_Alaska_albers_V3\n",
"007_002_Alaska_albers_V3\n",
"006_003_Alaska_albers_V3\n",
"007_003_Alaska_albers_V3\n",
"008_003_Alaska_albers_V3\n",
"004_004_Alaska_albers_V3\n",
"005_004_Alaska_albers_V3\n",
"006_004_Alaska_albers_V3\n",
"007_004_Alaska_albers_V3\n",
"008_004_Alaska_albers_V3\n",
"009_004_Alaska_albers_V3\n",
"010_004_Alaska_albers_V3\n",
"011_004_Alaska_albers_V3\n",
"004_005_Alaska_albers_V3\n",
"005_005_Alaska_albers_V3\n",
"006_005_Alaska_albers_V3\n",
"007_005_Alaska_albers_V3\n",
"008_005_Alaska_albers_V3\n",
"009_005_Alaska_albers_V3\n",
"010_005_Alaska_albers_V3\n",
"011_005_Alaska_albers_V3\n",
"003_006_Alaska_albers_V3\n",
"004_006_Alaska_albers_V3\n",
"005_006_Alaska_albers_V3\n",
"006_006_Alaska_albers_V3\n",
"009_006_Alaska_albers_V3\n",
"010_006_Alaska_albers_V3\n",
"011_006_Alaska_albers_V3\n",
"000_007_Alaska_albers_V3\n",
"001_007_Alaska_albers_V3\n",
"002_007_Alaska_albers_V3\n",
"003_007_Alaska_albers_V3\n",
"004_007_Alaska_albers_V3\n"
]
}
],
"source": [
"# read the REMA Tile Index\n",
"gdf = gpd.read_file('Alaska_albers_V3_tiles.shp') \n",
"print(len(gdf))\n",
"\n",
"full_dir = '/home/mowglie/disk/OGGM_INPUT/download_cache/cluster.klima.uni-bremen.de/'\n",
"full_dir += '~fmaussion/DEM/Alaska_albers_V3/'\n",
"utils.mkdir(full_dir, reset=True)\n",
"\n",
"for i in range(len(gdf)):\n",
" # seperate one tile from the tile index\n",
" tile = gdf.iloc[[i]] \n",
" \n",
" # create one directory for every tile\n",
" name = '{}_Alaska_albers_V3'.format(tile.iloc[0].tile)\n",
" print(name)\n",
" out_dir = os.path.join(full_dir, name)\n",
" utils.mkdir(out_dir, reset=True)\n",
" \n",
" # make and write one shapefile for every tile, necessary for gdalwarp\n",
" index_dir = os.path.join(out_dir, 'index')\n",
" shp_file = os.path.join(index_dir, name + '_index.shp')\n",
" utils.mkdir(index_dir)\n",
" tile.to_file(shp_file)\n",
" \n",
" # name of the GeoTiff tile\n",
" dem_tile = os.path.join(out_dir, name + '.tif')\n",
"\n",
" # Use gdalwarp -cutline as shell command to cut one tile at a time\n",
" command = 'gdalwarp -cutline {} -crop_to_cutline -of GTiff {} {}'.format(shp_file, dem_full, dem_tile)\n",
" p = Popen(command, shell=True)\n",
" p.wait()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"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.5.2"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
},
"nbTranslate": {
"displayLangs": [
"*"
],
"hotkey": "alt-t",
"langInMainMenu": true,
"sourceLang": "en",
"targetLang": "fr",
"useGoogleTranslate": true
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.