From 7cc88ceae7d36ac32c9e2935fbc2d81ed2792e8f Mon Sep 17 00:00:00 2001 From: Anne Fouilloux Date: Tue, 25 Jun 2024 20:27:02 +0200 Subject: [PATCH] add example with minIO --- docs/_toc.yml | 7 +- docs/images/minIO_keys.png | Bin 0 -> 142809 bytes docs/setup/object-storage-minio-test.ipynb | 385 -- docs/storage/minio-object-storage.ipynb | 4564 ++++++++++++++++++++ docs/storage/setup-object-storage.md | 12 + 5 files changed, 4582 insertions(+), 386 deletions(-) create mode 100644 docs/images/minIO_keys.png delete mode 100644 docs/setup/object-storage-minio-test.ipynb create mode 100644 docs/storage/minio-object-storage.ipynb create mode 100644 docs/storage/setup-object-storage.md diff --git a/docs/_toc.yml b/docs/_toc.yml index 3e2f353..80a62db 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -20,9 +20,14 @@ parts: title: Chunking - file: pangeo/dask_introduction title: Parallel computing with dask + - caption: Creating ARCO + chapters: + - file: storage/setup-object-storage + title: Create Minio Access Keys + - file: storage/minio-object-storage + title: Using personal online storage - caption: Beyond the workshop chapters: - - file: setup/object-storage-minio-test - file: afterword/resources title: Resources - file: afterword/pythia diff --git a/docs/images/minIO_keys.png b/docs/images/minIO_keys.png new file mode 100644 index 0000000000000000000000000000000000000000..9b61b50fc4610f72b8ceb64dd2cf201236b21b81 GIT binary patch literal 142809 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

C3f{h>Tsz`7ioZ32%MF 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 literal 0 HcmV?d00001 diff --git a/docs/setup/object-storage-minio-test.ipynb b/docs/setup/object-storage-minio-test.ipynb deleted file mode 100644 index a712dff..0000000 --- a/docs/setup/object-storage-minio-test.ipynb +++ /dev/null @@ -1,385 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "c4ae4f29-ce08-4546-9d51-01d3d6b1dbc5", - "metadata": {}, - "outputs": [], - "source": [ - "import xarray as xr\n", - "import s3fs\n", - "import zarr\n", - "import numpy as np\n", - "import dask.array as da\n", - "import xarray as xr\n", - "from dask.utils import parse_bytes\n", - "import math\n", - "import pandas as pd\n", - "import dask\n", - "import os" - ] - }, - { - "cell_type": "markdown", - "id": "833332ac-c23f-4b48-8e91-12ad1b2b9917", - "metadata": {}, - "source": [ - "# Simple MinIO access with s3fs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2ddfe89-cedc-4db4-8d27-a59a3cc71315", - "metadata": {}, - "outputs": [], - "source": [ - "#!aws configure set aws_access_key_id xxx\n", - "#!aws configure set aws_secret_access_key yyy" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c660357b-4cff-4f07-8f01-7bcd743bea6f", - "metadata": {}, - "outputs": [], - "source": [ - "access_key = !aws configure get aws_access_key_id\n", - "access_key = access_key[0]\n", - "secret_key = !aws configure get aws_secret_access_key\n", - "secret_key = secret_key[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3f938612-2a10-48f0-97ef-f6ce5d14f8a2", - "metadata": {}, - "outputs": [], - "source": [ - "client_kwargs={'endpoint_url': 'https://pangeo-eosc-minioapi.vm.fedcloud.eu/'}\n", - "\n", - "#s3 = s3fs.S3FileSystem(anon=False, client_kwargs=client_kwargs) # Works only when using s3 in this Notebook, not with distributed.\n", - "s3 = s3fs.S3FileSystem(key=access_key, secret=secret_key, client_kwargs=client_kwargs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03b164e0-eef5-4843-b614-2ee98db610cd", - "metadata": {}, - "outputs": [], - "source": [ - "s3_prefix = os.environ['JUPYTERHUB_USER']\n", - "# s3_suffix below is what you need to customise to create your own buckets:\n", - "s3_suffix = 'test'\n", - "s3_bucket = s3_prefix + '-' + s3_suffix + '/'\n", - "s3.ls(s3_bucket)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f89c4de0-848c-4720-b35f-1d699435e7d1", - "metadata": {}, - "outputs": [], - "source": [ - "s3.touch(s3_bucket + 'myfile')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e8f5cde6-5495-4353-be92-f848d3b42d9f", - "metadata": {}, - "outputs": [], - "source": [ - "s3.ls(s3_bucket)" - ] - }, - { - "cell_type": "markdown", - "id": "8eb691f9-42ab-455e-912d-8a6c7ecdb87b", - "metadata": {}, - "source": [ - "# Try to write some Zarr" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e5c679e5-aa11-43ea-8aa5-2551192db872", - "metadata": {}, - "outputs": [], - "source": [ - "def timeseries(\n", - " chunk_per_worker=5,\n", - " chunk_size=\"128 MB\",\n", - " num_nodes=12,\n", - " worker_per_node=4,\n", - " chunking_scheme=None,\n", - " lat=320,\n", - " lon=384,\n", - " start=\"1980-01-01\",\n", - " freq=\"1H\",\n", - " nan=False,\n", - "):\n", - " \"\"\" Create synthetic Xarray dataset filled with random\n", - " data.\n", - " Parameters\n", - " ----------\n", - " chunk_per_worker : int\n", - " number of chunk placed per worker.\n", - " see docs.dask.org, best practices, for chunk.\n", - " Best chunk size is around 100M but, each worker can\n", - " have many chunk, which automate the parallelism in dask.\n", - " chunk_size : str\n", - " chunk size in bytes, kilo, mega or any factor of bytes\n", - " num_nodes : int\n", - " number of compute nodes\n", - " worker_per_node: int\n", - " number of dask workers per node\n", - " chunking_scheme : str\n", - " Whether to chunk across time dimension ('temporal') or\n", - " horizontal dimensions (lat, lon) ('spatial').\n", - " If None, automatically determine chunk sizes along all dimensions.\n", - " lat : int\n", - " number of latitude values\n", - " lon : int\n", - " number of longitude values\n", - " start : datetime (or datetime-like string)\n", - " Start of time series\n", - " freq : string\n", - " String like '2s' or '1H' or '12W' for the time series frequency\n", - " nan : bool\n", - " Whether to include nan in generated data\n", - " Examples\n", - " ---------\n", - " >>> from benchmarks.datasets import timeseries\n", - " >>> ds = timeseries('128MB', 5, chunking_scheme='spatial', lat=500, lon=600)\n", - " >>> ds\n", - " \n", - " Dimensions: (lat: 500, lon: 600, time: 267)\n", - " Coordinates:\n", - " * time (time) datetime64[ns] 1980-01-01 1980-01-02 ... 1980-09-23\n", - " * lon (lon) float64 -180.0 -179.4 -178.8 -178.2 ... 178.8 179.4 180.0\n", - " * lat (lat) float64 -90.0 -89.64 -89.28 -88.92 ... 88.92 89.28 89.64 90.0\n", - " Data variables:\n", - " sst (time, lon, lat) float64 dask.array\n", + " Discover data and create \n", + "
    \n", + "
  • We show how to access s3 anonymous data in geotiff using Xarray, make a geographical area selection and store into zarr on s3 private object storage
  • \n", + "
  • We do not address dask (chunking optimization, etc.)
  • \n", + "
\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "widespread-flood", + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + " var py_version = '3.3.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", + " var reloading = false;\n", + " var Bokeh = root.Bokeh;\n", + "\n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) {\n", + " if (callback != null)\n", + " callback();\n", + " });\n", + " } finally {\n", + " delete root._bokeh_onload_callbacks;\n", + " }\n", + " console.debug(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n", + " if (css_urls == null) css_urls = [];\n", + " if (js_urls == null) js_urls = [];\n", + " if (js_modules == null) js_modules = [];\n", + " if (js_exports == null) js_exports = {};\n", + "\n", + " root._bokeh_onload_callbacks.push(callback);\n", + "\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " if (!reloading) {\n", + " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " }\n", + "\n", + " function on_load() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", + " run_callbacks()\n", + " }\n", + " }\n", + " window._bokeh_on_load = on_load\n", + "\n", + " function on_error() {\n", + " console.error(\"failed to load \" + url);\n", + " }\n", + "\n", + " var skip = [];\n", + " if (window.requirejs) {\n", + " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", + " require([\"jspanel\"], function(jsPanel) {\n", + "\twindow.jsPanel = jsPanel\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-modal\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-tooltip\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-hint\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-layout\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-contextmenu\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-dock\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"gridstack\"], function(GridStack) {\n", + "\twindow.GridStack = GridStack\n", + "\ton_load()\n", + " })\n", + " require([\"notyf\"], function() {\n", + "\ton_load()\n", + " })\n", + " root._bokeh_is_loading = css_urls.length + 9;\n", + " } else {\n", + " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", + " }\n", + "\n", + " var existing_stylesheets = []\n", + " var links = document.getElementsByTagName('link')\n", + " for (var i = 0; i < links.length; i++) {\n", + " var link = links[i]\n", + " if (link.href != null) {\n", + "\texisting_stylesheets.push(link.href)\n", + " }\n", + " }\n", + " for (var i = 0; i < css_urls.length; i++) {\n", + " var url = css_urls[i];\n", + " if (existing_stylesheets.indexOf(url) !== -1) {\n", + "\ton_load()\n", + "\tcontinue;\n", + " }\n", + " const element = document.createElement(\"link\");\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.rel = \"stylesheet\";\n", + " element.type = \"text/css\";\n", + " element.href = url;\n", + " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", + " document.body.appendChild(element);\n", + " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", + " var urls = ['https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", + " for (var i = 0; i < urls.length; i++) {\n", + " skip.push(urls[i])\n", + " }\n", + " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", + " var urls = ['https://cdn.holoviz.org/panel/1.3.4/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", + " for (var i = 0; i < urls.length; i++) {\n", + " skip.push(urls[i])\n", + " }\n", + " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", + " var urls = ['https://cdn.holoviz.org/panel/1.3.4/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", + " for (var i = 0; i < urls.length; i++) {\n", + " skip.push(urls[i])\n", + " }\n", + " } var existing_scripts = []\n", + " var scripts = document.getElementsByTagName('script')\n", + " for (var i = 0; i < scripts.length; i++) {\n", + " var script = scripts[i]\n", + " if (script.src != null) {\n", + "\texisting_scripts.push(script.src)\n", + " }\n", + " }\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", + "\tif (!window.requirejs) {\n", + "\t on_load();\n", + "\t}\n", + "\tcontinue;\n", + " }\n", + " var element = document.createElement('script');\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.src = url;\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.head.appendChild(element);\n", + " }\n", + " for (var i = 0; i < js_modules.length; i++) {\n", + " var url = js_modules[i];\n", + " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", + "\tif (!window.requirejs) {\n", + "\t on_load();\n", + "\t}\n", + "\tcontinue;\n", + " }\n", + " var element = document.createElement('script');\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.src = url;\n", + " element.type = \"module\";\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.head.appendChild(element);\n", + " }\n", + " for (const name in js_exports) {\n", + " var url = js_exports[name];\n", + " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", + "\tif (!window.requirejs) {\n", + "\t on_load();\n", + "\t}\n", + "\tcontinue;\n", + " }\n", + " var element = document.createElement('script');\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.type = \"module\";\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " element.textContent = `\n", + " import ${name} from \"${url}\"\n", + " window.${name} = ${name}\n", + " window._bokeh_on_load()\n", + " `\n", + " document.head.appendChild(element);\n", + " }\n", + " if (!js_urls.length && !js_modules.length) {\n", + " on_load()\n", + " }\n", + " };\n", + "\n", + " function inject_raw_css(css) {\n", + " const element = document.createElement(\"style\");\n", + " element.appendChild(document.createTextNode(css));\n", + " document.body.appendChild(element);\n", + " }\n", + "\n", + " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.2.min.js\", \"https://cdn.holoviz.org/panel/1.3.4/dist/panel.min.js\"];\n", + " var js_modules = [];\n", + " var js_exports = {};\n", + " var css_urls = [];\n", + " var inline_js = [ function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + "function(Bokeh) {} // ensure no trailing comma for IE\n", + " ];\n", + "\n", + " function run_inline_js() {\n", + " if ((root.Bokeh !== undefined) || (force === true)) {\n", + " for (var i = 0; i < inline_js.length; i++) {\n", + "\ttry {\n", + " inline_js[i].call(root, root.Bokeh);\n", + "\t} catch(e) {\n", + "\t if (!reloading) {\n", + "\t throw e;\n", + "\t }\n", + "\t}\n", + " }\n", + " // Cache old bokeh versions\n", + " if (Bokeh != undefined && !reloading) {\n", + "\tvar NewBokeh = root.Bokeh;\n", + "\tif (Bokeh.versions === undefined) {\n", + "\t Bokeh.versions = new Map();\n", + "\t}\n", + "\tif (NewBokeh.version !== Bokeh.version) {\n", + "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", + "\t}\n", + "\troot.Bokeh = Bokeh;\n", + " }} else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(run_inline_js, 100);\n", + " } else if (!root._bokeh_failed_load) {\n", + " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", + " root._bokeh_failed_load = true;\n", + " }\n", + " root._bokeh_is_initializing = false\n", + " }\n", + "\n", + " function load_or_wait() {\n", + " // Implement a backoff loop that tries to ensure we do not load multiple\n", + " // versions of Bokeh and its dependencies at the same time.\n", + " // In recent versions we use the root._bokeh_is_initializing flag\n", + " // to determine whether there is an ongoing attempt to initialize\n", + " // bokeh, however for backward compatibility we also try to ensure\n", + " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n", + " // before older versions are fully initialized.\n", + " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n", + " root._bokeh_is_initializing = false;\n", + " root._bokeh_onload_callbacks = undefined;\n", + " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n", + " load_or_wait();\n", + " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n", + " setTimeout(load_or_wait, 100);\n", + " } else {\n", + " root._bokeh_is_initializing = true\n", + " root._bokeh_onload_callbacks = []\n", + " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", + " if (!reloading && !bokeh_loaded) {\n", + "\troot.Bokeh = undefined;\n", + " }\n", + " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", + "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", + "\trun_inline_js();\n", + " });\n", + " }\n", + " }\n", + " // Give older versions of the autoload script a head-start to ensure\n", + " // they initialize before we start loading newer version.\n", + " setTimeout(load_or_wait, 100)\n", + "}(window));" + ], + "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n var py_version = '3.3.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var reloading = false;\n var Bokeh = root.Bokeh;\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.4/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.4/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.4/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.2.min.js\", \"https://cdn.holoviz.org/panel/1.3.4/dist/panel.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n\ttry {\n inline_js[i].call(root, root.Bokeh);\n\t} catch(e) {\n\t if (!reloading) {\n\t throw e;\n\t }\n\t}\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n if (!reloading && !bokeh_loaded) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", + " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", + "}\n", + "\n", + "\n", + " function JupyterCommManager() {\n", + " }\n", + "\n", + " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", + " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", + " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", + " comm_manager.register_target(comm_id, function(comm) {\n", + " comm.on_msg(msg_handler);\n", + " });\n", + " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", + " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", + " comm.onMsg = msg_handler;\n", + " });\n", + " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", + " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", + " var messages = comm.messages[Symbol.asyncIterator]();\n", + " function processIteratorResult(result) {\n", + " var message = result.value;\n", + " console.log(message)\n", + " var content = {data: message.data, comm_id};\n", + " var buffers = []\n", + " for (var buffer of message.buffers || []) {\n", + " buffers.push(new DataView(buffer))\n", + " }\n", + " var metadata = message.metadata || {};\n", + " var msg = {content, buffers, metadata}\n", + " msg_handler(msg);\n", + " return messages.next().then(processIteratorResult);\n", + " }\n", + " return messages.next().then(processIteratorResult);\n", + " })\n", + " }\n", + " }\n", + "\n", + " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", + " if (comm_id in window.PyViz.comms) {\n", + " return window.PyViz.comms[comm_id];\n", + " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", + " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", + " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", + " if (msg_handler) {\n", + " comm.on_msg(msg_handler);\n", + " }\n", + " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", + " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", + " comm.open();\n", + " if (msg_handler) {\n", + " comm.onMsg = msg_handler;\n", + " }\n", + " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", + " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", + " comm_promise.then((comm) => {\n", + " window.PyViz.comms[comm_id] = comm;\n", + " if (msg_handler) {\n", + " var messages = comm.messages[Symbol.asyncIterator]();\n", + " function processIteratorResult(result) {\n", + " var message = result.value;\n", + " var content = {data: message.data};\n", + " var metadata = message.metadata || {comm_id};\n", + " var msg = {content, metadata}\n", + " msg_handler(msg);\n", + " return messages.next().then(processIteratorResult);\n", + " }\n", + " return messages.next().then(processIteratorResult);\n", + " }\n", + " }) \n", + " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", + " return comm_promise.then((comm) => {\n", + " comm.send(data, metadata, buffers, disposeOnDone);\n", + " });\n", + " };\n", + " var comm = {\n", + " send: sendClosure\n", + " };\n", + " }\n", + " window.PyViz.comms[comm_id] = comm;\n", + " return comm;\n", + " }\n", + " window.PyViz.comm_manager = new JupyterCommManager();\n", + " \n", + "\n", + "\n", + "var JS_MIME_TYPE = 'application/javascript';\n", + "var HTML_MIME_TYPE = 'text/html';\n", + "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", + "var CLASS_NAME = 'output';\n", + "\n", + "/**\n", + " * Render data to the DOM node\n", + " */\n", + "function render(props, node) {\n", + " var div = document.createElement(\"div\");\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(div);\n", + " node.appendChild(script);\n", + "}\n", + "\n", + "/**\n", + " * Handle when a new output is added\n", + " */\n", + "function handle_add_output(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", + " if (id !== undefined) {\n", + " var nchildren = toinsert.length;\n", + " var html_node = toinsert[nchildren-1].children[0];\n", + " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var scripts = [];\n", + " var nodelist = html_node.querySelectorAll(\"script\");\n", + " for (var i in nodelist) {\n", + " if (nodelist.hasOwnProperty(i)) {\n", + " scripts.push(nodelist[i])\n", + " }\n", + " }\n", + "\n", + " scripts.forEach( function (oldScript) {\n", + " var newScript = document.createElement(\"script\");\n", + " var attrs = [];\n", + " var nodemap = oldScript.attributes;\n", + " for (var j in nodemap) {\n", + " if (nodemap.hasOwnProperty(j)) {\n", + " attrs.push(nodemap[j])\n", + " }\n", + " }\n", + " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", + " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", + " oldScript.parentNode.replaceChild(newScript, oldScript);\n", + " });\n", + " if (JS_MIME_TYPE in output.data) {\n", + " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", + " }\n", + " output_area._hv_plot_id = id;\n", + " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", + " window.PyViz.plot_index[id] = Bokeh.index[id];\n", + " } else {\n", + " window.PyViz.plot_index[id] = null;\n", + " }\n", + " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + "}\n", + "\n", + "/**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + "function handle_clear_output(event, handle) {\n", + " var id = handle.cell.output_area._hv_plot_id;\n", + " var server_id = handle.cell.output_area._bokeh_server_id;\n", + " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", + " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", + " if (server_id !== null) {\n", + " comm.send({event_type: 'server_delete', 'id': server_id});\n", + " return;\n", + " } else if (comm !== null) {\n", + " comm.send({event_type: 'delete', 'id': id});\n", + " }\n", + " delete PyViz.plot_index[id];\n", + " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", + " var doc = window.Bokeh.index[id].model.document\n", + " doc.clear();\n", + " const i = window.Bokeh.documents.indexOf(doc);\n", + " if (i > -1) {\n", + " window.Bokeh.documents.splice(i, 1);\n", + " }\n", + " }\n", + "}\n", + "\n", + "/**\n", + " * Handle kernel restart event\n", + " */\n", + "function handle_kernel_cleanup(event, handle) {\n", + " delete PyViz.comms[\"hv-extension-comm\"];\n", + " window.PyViz.plot_index = {}\n", + "}\n", + "\n", + "/**\n", + " * Handle update_display_data messages\n", + " */\n", + "function handle_update_output(event, handle) {\n", + " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", + " handle_add_output(event, handle)\n", + "}\n", + "\n", + "function register_renderer(events, OutputArea) {\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[0]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " events.on('output_added.OutputArea', handle_add_output);\n", + " events.on('output_updated.OutputArea', handle_update_output);\n", + " events.on('clear_output.CodeCell', handle_clear_output);\n", + " events.on('delete.Cell', handle_clear_output);\n", + " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", + "\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " safe: true,\n", + " index: 0\n", + " });\n", + "}\n", + "\n", + "if (window.Jupyter !== undefined) {\n", + " try {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " } catch(err) {\n", + " }\n", + "}\n" + ], + "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ] + }, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1002" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "import os\n", + "import logging\n", + "import s3fs\n", + "import rioxarray\n", + "import xarray as xr\n", + "from hvplot import xarray\n", + "from distributed import Client\n", + "import zipfile" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "84f736a6-2a05-4c02-a874-a777881e204a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-d21030db-331e-11ef-8d99-aa21e200a370

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

12a21ddf

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + " \n", + " Workers: 8\n", + "
\n", + " Total threads: 8\n", + " \n", + " Total memory: 32.00 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-b2c41524-2157-44bb-8588-da7c3f50b340

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:33885\n", + " \n", + " Workers: 8\n", + "
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + " \n", + " Total threads: 8\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 32.00 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:33261\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:33069/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:44633\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-j_5na5l1\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 1

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:34991\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:37839/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:40869\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-gc_fpb4w\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 2

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:43059\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:46119/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:36167\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-m4wggao9\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 3

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:45355\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:41085/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:33831\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-190aj7ha\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 4

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:43857\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:41811/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:39723\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-fpr0f2c8\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 5

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:41847\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:33191/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:45719\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-p6ul74ju\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 6

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:40223\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:37043/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:36475\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-4p22pew1\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 7

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:40975\n", + " \n", + " Total threads: 1\n", + "
\n", + " Dashboard: http://127.0.0.1:46691/status\n", + " \n", + " Memory: 4.00 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:38315\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-4eefz8ny\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client = Client(n_workers=8, silence_logs=logging.ERROR)\n", + "client" + ] + }, + { + "cell_type": "markdown", + "id": "d70a2f86-ac31-4131-be21-fc107a2cb5a0", + "metadata": {}, + "source": [ + "## Access Data from OpenTopography \n", + "- [OpenTopography](https://opentopography.org/about) facilitates efficient access to topography data, tools, and resources to advance our understanding of the Earth’s surface, vegetation, and built environment.\n", + "- The example below is taken from OpenTopography with some adjustments for the purpose of this training material. The original jupyter notebook [OT_BulkAccessCOGs.ipynb](https://github.com/OpenTopography/OT_BulkAccess_COGs/blob/main/OT_BulkAccessCOGs.ipynb) has been developed by Matthew Beckley (UNAVCO, Inc.), Christopher Crosby (UNAVCO, Inc.), Viswanath Nandigam (San Diego Supercomputer Center, UC San Diego), Minh Phan (San Diego Supercomputer Center, UC San Diego). See [https://github.com/OpenTopography/OT_BulkAccess_COGs](https://github.com/OpenTopography/OT_BulkAccess_COGs) for more information.\n", + "- Data is accessible via public S3-compatible object storage. See detailed information on OpenTopography data, which are publicly available in the Analysis Ready Cloud Optimized (ARCO) data format. See more info at [https://opentopography.org/blog/programmatic-access-cloud-optimized-geotiff-cog-global-datasets](https://opentopography.org/blog/programmatic-access-cloud-optimized-geotiff-cog-global-datasets)" + ] + }, + { + "cell_type": "markdown", + "id": "neither-warrant", + "metadata": {}, + "source": [ + "## Connect to bucket (anonymous login for public data only)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b430bece-75cc-4241-a33c-bf5ba27ce051", + "metadata": {}, + "outputs": [], + "source": [ + "fsd = s3fs.S3FileSystem(anon=True,\n", + " client_kwargs={\n", + " \"endpoint_url\": \"https://opentopography.s3.sdsc.edu\"\n", + " })" + ] + }, + { + "cell_type": "markdown", + "id": "systematic-brother", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "### List bucket content" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "da37022b-eece-4371-97cd-03c58d18ce28", + "metadata": { + "editable": true, + "scrolled": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "hide-output" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['raster/SRTM_GL1/SRTM_GL1_srtm/N00E006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E103.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E104.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E106.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E107.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E108.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E109.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E110.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E111.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E112.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E119.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E120.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E121.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E122.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E123.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E124.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E127.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E128.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E129.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E130.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E131.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E134.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E172.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00E173.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W050.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W051.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W052.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W053.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W054.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W055.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W081.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W090.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W091.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W092.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N00W177.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E103.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E104.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E106.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E107.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E108.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E109.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E110.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E111.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E112.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E119.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E120.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E121.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E122.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E124.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E127.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E128.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E131.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E154.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E172.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01E173.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W050.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W051.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W052.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W053.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W054.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W055.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W092.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N01W158.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E095.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E096.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E103.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E104.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E105.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E106.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E107.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E108.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E109.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E111.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E112.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E127.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E128.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E131.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02E173.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W051.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W052.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W053.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W054.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W055.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N02W158.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E047.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E095.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E096.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E103.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E105.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E106.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E107.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E108.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E112.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E131.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E154.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E172.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03E173.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W051.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W052.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W053.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W054.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W055.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W082.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N03W160.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E047.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E048.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E095.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E096.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E103.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E107.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E108.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E119.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E127.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E131.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E132.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04E168.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W052.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W053.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W054.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W055.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W082.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N04W161.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E000.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E047.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E048.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E094.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E095.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E096.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E103.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E119.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E120.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E121.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E124.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E132.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E153.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E157.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E162.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E163.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E168.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E169.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05E172.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W053.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W054.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W055.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W088.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N05W163.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E000.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E047.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E048.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E049.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E081.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E093.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E095.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E101.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E102.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E115.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E120.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E121.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E122.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E123.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E124.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E134.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E143.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E149.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E151.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E152.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E157.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E158.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E159.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E160.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E169.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E171.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06E172.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W056.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W057.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W058.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N06W163.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E000.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E047.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E048.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E049.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E081.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E093.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E121.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E122.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E123.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E124.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E134.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E143.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E144.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E145.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E146.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E147.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E149.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E151.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E152.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E155.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E157.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E158.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E168.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07E171.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W059.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W081.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W082.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N07W083.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E000.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E015.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E016.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E017.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E018.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E019.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E020.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E021.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E022.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E023.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E024.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E025.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E026.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E027.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E028.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E029.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E030.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E031.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E032.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E033.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E034.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E035.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E036.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E037.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E038.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E039.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E040.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E041.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E042.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E043.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E044.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E045.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E046.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E047.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E048.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E049.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E050.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E077.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E078.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E079.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E080.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E081.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E092.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E093.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E097.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E098.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E099.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E100.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E104.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E105.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E106.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E111.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E116.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E117.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E118.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E122.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E123.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E124.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E125.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E126.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E134.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E137.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E140.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E144.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E146.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E147.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E149.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E150.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E151.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E152.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E154.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E165.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E166.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E167.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E168.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E170.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08E171.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W001.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W002.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W003.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W004.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W005.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W006.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W007.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W008.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W009.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W010.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W011.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W012.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W013.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W014.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W060.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W061.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W062.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W063.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W064.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W065.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W066.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W067.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W068.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W069.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W070.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W071.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W072.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W073.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W074.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W075.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W076.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N08W077.tif',\n", + " ...]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsd.ls(\"raster/SRTM_GL1/SRTM_GL1_srtm/\")" + ] + }, + { + "cell_type": "markdown", + "id": "guided-palmer", + "metadata": {}, + "source": [ + "## Access data files " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "alike-consistency", + "metadata": {}, + "outputs": [], + "source": [ + "s3path = \"s3://raster/SRTM_GL1/SRTM_GL1_srtm/N3[56]W11[234].tif\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "accredited-columbus", + "metadata": {}, + "outputs": [], + "source": [ + "remote_files = fsd.glob(s3path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "neutral-indicator", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['raster/SRTM_GL1/SRTM_GL1_srtm/N35W112.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N35W113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N35W114.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N36W112.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N36W113.tif',\n", + " 'raster/SRTM_GL1/SRTM_GL1_srtm/N36W114.tif']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "remote_files" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "bored-olive", + "metadata": {}, + "outputs": [], + "source": [ + "# Iterate through remote_files to create a fileset\n", + "fileset = [fsd.open(file) for file in remote_files]\n", + "\n", + "# This works\n", + "dset = xr.open_mfdataset(fileset, combine='by_coords', engine=\"rasterio\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d0df29b7-4b9e-40fb-bbe4-b6341d1e03e4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:      (band: 1, x: 10803, y: 7202)\n",
+       "Coordinates:\n",
+       "  * band         (band) int64 1\n",
+       "  * x            (x) float64 -114.0 -114.0 -114.0 ... -111.0 -111.0 -111.0\n",
+       "  * y            (y) float64 37.0 37.0 37.0 37.0 37.0 ... 35.0 35.0 35.0 35.0\n",
+       "    spatial_ref  int64 0\n",
+       "Data variables:\n",
+       "    band_data    (band, y, x) float32 dask.array<chunksize=(1, 512, 512), meta=np.ndarray>
" + ], + "text/plain": [ + "\n", + "Dimensions: (band: 1, x: 10803, y: 7202)\n", + "Coordinates:\n", + " * band (band) int64 1\n", + " * x (x) float64 -114.0 -114.0 -114.0 ... -111.0 -111.0 -111.0\n", + " * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 35.0 35.0 35.0 35.0\n", + " spatial_ref int64 0\n", + "Data variables:\n", + " band_data (band, y, x) float32 dask.array" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dset" + ] + }, + { + "cell_type": "markdown", + "id": "0d818d6e-f323-46dd-a2d2-11e988d8bd5e", + "metadata": {}, + "source": [ + "## Coarsen to visualize data faster\n", + "\n", + "- It is good practice to use `coarsen` to quickly visualize your data\n", + "- `persist()` triggers computation but keeps data as dask arrays." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "11bfed73-fdf7-4fc3-84b0-b5b62d8ae1c9", + "metadata": {}, + "outputs": [], + "source": [ + "dsmall = dset.band_data.coarsen(x=10, y=10, boundary='pad').mean().persist()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c82c307c-477b-4426-8e1d-ad24e39d8ffd", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:param.Image01689: Image dimension(s) x and y are not evenly sampled to relative tolerance of 0.001. Please use the QuadMesh element for irregularly sampled data or set a higher tolerance on hv.config.image_rtol or the rtol parameter in the Image constructor.\n", + "WARNING:param.Image01689: Image dimension(s) x and y are not evenly sampled to relative tolerance of 0.001. Please use the QuadMesh element for irregularly sampled data or set a higher tolerance on hv.config.image_rtol or the rtol parameter in the Image constructor.\n" + ] + }, + { + "data": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + ":DynamicMap [band]\n", + " :Overlay\n", + " .WMTS.I :WMTS [Longitude,Latitude]\n", + " .Image.I :Image [x,y] (band_data)" + ] + }, + "execution_count": 11, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1011" + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "dsmall.hvplot(x = 'x', y = 'y',\n", + " cmap='RdYlGn', alpha=0.7,\n", + " geo=True, tiles= 'CartoLight', width=700, height=700)" + ] + }, + { + "cell_type": "markdown", + "id": "d6a271c5-fa9f-42d5-8576-0a77d42232d9", + "metadata": {}, + "source": [ + "## Save the dataset into a local Zarr" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e6a2471a-1e6d-4106-b2c8-9e9aba142614", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dset.chunk(chunks=\"auto\").to_zarr(\"SRTM_GL1_Colorado.zarr\", mode=\"w\", consolidated=True, compute=True, encoding={\"x\": {}, \"y\": {}})" + ] + }, + { + "cell_type": "markdown", + "id": "7da6554b-8b85-48c1-8886-d210d22c1892", + "metadata": {}, + "source": [ + "## Zip the local Zarr" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e8994c1e-f1da-4474-9fbb-69ef6d64bf54", + "metadata": {}, + "outputs": [], + "source": [ + "def zipzarr(file):\n", + " filename = file + os.path.extsep + \"zip\"\n", + " with zipfile.ZipFile(\n", + " filename, \"w\", compression=zipfile.ZIP_STORED, allowZip64=True) as fh:\n", + " for root, _, filenames in os.walk(file):\n", + " for each_filename in filenames:\n", + " each_filename = os.path.join(root, each_filename)\n", + " fh.write(each_filename, os.path.relpath(each_filename, file))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "e1414df5-57e1-496c-bbbd-7b17f87cbc65", + "metadata": {}, + "outputs": [], + "source": [ + "zipzarr(\"SRTM_GL1_Colorado.zarr\")" + ] + }, + { + "cell_type": "markdown", + "id": "e9c9672c-eabb-4f48-abdf-7b0b19b312e6", + "metadata": {}, + "source": [ + "## Read local zarr" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "7ce58a6b-72ad-4809-afd5-d245efa6197e", + "metadata": {}, + "outputs": [], + "source": [ + "dc = xr.open_dataset(\"SRTM_GL1_Colorado.zarr.zip\", engine=\"zarr\", consolidated=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f80e48d8-a43d-43ac-b5b4-b530f8f45024", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:      (band: 1, y: 7202, x: 10803)\n",
+       "Coordinates:\n",
+       "  * band         (band) int64 1\n",
+       "  * x            (x) float64 -114.0 -114.0 -114.0 ... -111.0 -111.0 -111.0\n",
+       "  * y            (y) float64 37.0 37.0 37.0 37.0 37.0 ... 35.0 35.0 35.0 35.0\n",
+       "Data variables:\n",
+       "    band_data    (band, y, x) float32 ...\n",
+       "    spatial_ref  int64 ...
" + ], + "text/plain": [ + "\n", + "Dimensions: (band: 1, y: 7202, x: 10803)\n", + "Coordinates:\n", + " * band (band) int64 1\n", + " * x (x) float64 -114.0 -114.0 -114.0 ... -111.0 -111.0 -111.0\n", + " * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 35.0 35.0 35.0 35.0\n", + "Data variables:\n", + " band_data (band, y, x) float32 ...\n", + " spatial_ref int64 ..." + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "d8a0f679-52a8-43c9-8bf6-4f1ee932593c", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:param.Image01892: Image dimension(s) x and y are not evenly sampled to relative tolerance of 0.001. Please use the QuadMesh element for irregularly sampled data or set a higher tolerance on hv.config.image_rtol or the rtol parameter in the Image constructor.\n", + "WARNING:param.Image01892: Image dimension(s) x and y are not evenly sampled to relative tolerance of 0.001. Please use the QuadMesh element for irregularly sampled data or set a higher tolerance on hv.config.image_rtol or the rtol parameter in the Image constructor.\n" + ] + }, + { + "data": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + ":DynamicMap [band]\n", + " :Overlay\n", + " .WMTS.I :WMTS [Longitude,Latitude]\n", + " .Image.I :Image [x,y] (band_data)" + ] + }, + "execution_count": 17, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1124" + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "dc.band_data.coarsen(x=10, y=10, boundary='pad').mean().persist().hvplot(x = 'x', y = 'y',\n", + " cmap='RdYlGn', alpha=0.7,\n", + " geo=True, tiles= 'CartoLight', width=700, height=700)" + ] + }, + { + "cell_type": "markdown", + "id": "cbc37b5d-b43d-421a-a73f-dbf60e1f1636", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## Put zarr into private bucket" + ] + }, + { + "cell_type": "markdown", + "id": "wound-antique", + "metadata": {}, + "source": [ + "## Save results in zarr on private object storage for further analysis\n", + "- your credentials are in `$HOME/.aws/credentials` \n", + "- check with your instructor to get the secret access key (replace XXX by the right key)\n", + "\n", + "```\n", + "[default]\n", + "aws_access_key_id=XXXXXXXXXXXX\n", + "aws_secret_access_key=YYYYYYYYYY\n", + "aws_endpoint_url=https://pangeo-eosc-minioapi.vm.fedcloud.eu/\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "bdf41d7d-76f5-4b7a-933d-e0574063dd86", + "metadata": {}, + "source": [ + "### Set the path to your group's location (ask your instructor)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "86e5e2aa-8756-458c-ac37-4fc04a24c5a5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'afouilloux-work/'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s3_prefix = os.environ['JUPYTERHUB_USER']\n", + "# s3_suffix below is what you need to customise to create your own buckets:\n", + "s3_suffix = 'work'\n", + "s3_bucket = s3_prefix + '-' + s3_suffix + '/'\n", + "s3_bucket" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "9238f645-774b-412f-bf1a-246421a96277", + "metadata": {}, + "outputs": [], + "source": [ + "fss = s3fs.S3FileSystem(anon=False,\n", + " client_kwargs={\n", + " \"endpoint_url\": \"https://pangeo-eosc-minioapi.vm.fedcloud.eu/\"\n", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "801b3177-945b-4346-8e6a-74a9dda2bbe7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['afouilloux-work/SRTM_GL1_srtm_Colorado.zarr',\n", + " 'afouilloux-work/SRTM_GL1_srtm_Colorado.zarr.zip']" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fss.ls(s3_bucket)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "db0a73e6-9cfa-47e0-b0a4-eed00b308075", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zarr is present online so we delete it\n" + ] + }, + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "try:\n", + " fss.ls(s3_bucket + \"SRTM_GL1_srtm_Colorado.zarr.zip\")\n", + " print(\"zarr is present online so we delete it\")\n", + " fss.rm(s3_bucket + \"SRTM_GL1_srtm_Colorado.zarr.zip\")\n", + "except:\n", + " print(\"Zarr is not there; no need to delete it\")\n", + "\n", + "fss.put(\"SRTM_GL1_Colorado.zarr.zip\", s3_bucket + \"/SRTM_GL1_srtm_Colorado.zarr.zip\")" + ] + }, + { + "cell_type": "markdown", + "id": "demanding-spirit", + "metadata": {}, + "source": [ + "## Check what you have stored in s3\n", + "\n", + "- we use https://pangeo-eosc-minioapi.vm.fedcloud.eu/ as an endpoint\n", + "- we need to authenticate to access data (anon=False)" + ] + }, + { + "cell_type": "markdown", + "id": "0961de44-e27a-4f00-b924-650373142abb", + "metadata": {}, + "source": [ + "### Read zarr from private s3 bucket" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "657a0112-202a-401c-94b8-87922d8aa18d", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import s3fs\n", + "import zipfile\n", + "import fsspec\n", + "from fsspec.implementations.zip import ZipFileSystem\n", + "from fsspec.mapping import FSMap\n", + "import xarray as xr\n", + "from hvplot import xarray" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "296ecbd8-94ed-448e-b6fe-ac330ad5f87e", + "metadata": {}, + "outputs": [], + "source": [ + "fst = s3fs.S3FileSystem(anon=False,\n", + " client_kwargs={\n", + " \"endpoint_url\": \"https://pangeo-eosc-minioapi.vm.fedcloud.eu/\"\n", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "8b5f60db-320e-4722-8e99-5986fcc9db62", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'afouilloux-work/'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s3_prefix = os.environ['JUPYTERHUB_USER']\n", + "# s3_suffix below is what you need to customise to create your own buckets:\n", + "s3_suffix = 'work'\n", + "s3_bucket = s3_prefix + '-' + s3_suffix + '/'\n", + "s3_bucket" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "3dc39081-5bc2-4440-8d49-02bffd4150af", + "metadata": {}, + "outputs": [], + "source": [ + "s3_path = \"s3://\" + s3_bucket + \"SRTM_GL1_srtm_Colorado.zarr.zip\"" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "26180e8c-b939-41e9-b744-d97108320129", + "metadata": {}, + "outputs": [], + "source": [ + "f = fst.open(s3_path)\n", + "fs = ZipFileSystem(f, mode=\"r\")\n", + "store = FSMap(\"\", fs, check=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "e0fd67f4-068a-4e21-aba2-d7c217f91b9d", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Read Zarr file\n", + "ds = xr.open_zarr(store=store, consolidated=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "470f7876-2d93-4673-819d-b354aed42892", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:      (band: 1, y: 7202, x: 10803)\n",
+       "Coordinates:\n",
+       "  * band         (band) int64 1\n",
+       "  * x            (x) float64 -114.0 -114.0 -114.0 ... -111.0 -111.0 -111.0\n",
+       "  * y            (y) float64 37.0 37.0 37.0 37.0 37.0 ... 35.0 35.0 35.0 35.0\n",
+       "Data variables:\n",
+       "    band_data    (band, y, x) float32 dask.array<chunksize=(1, 5632, 5632), meta=np.ndarray>\n",
+       "    spatial_ref  int64 ...
" + ], + "text/plain": [ + "\n", + "Dimensions: (band: 1, y: 7202, x: 10803)\n", + "Coordinates:\n", + " * band (band) int64 1\n", + " * x (x) float64 -114.0 -114.0 -114.0 ... -111.0 -111.0 -111.0\n", + " * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 35.0 35.0 35.0 35.0\n", + "Data variables:\n", + " band_data (band, y, x) float32 dask.array\n", + " spatial_ref int64 ..." + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "integrated-swiss", + "metadata": {}, + "source": [ + "## Access and visualize" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "7ac20299-3c3d-4962-94f2-befaa32010ad", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:param.Image02095: Image dimension(s) x and y are not evenly sampled to relative tolerance of 0.001. Please use the QuadMesh element for irregularly sampled data or set a higher tolerance on hv.config.image_rtol or the rtol parameter in the Image constructor.\n", + "WARNING:param.Image02095: Image dimension(s) x and y are not evenly sampled to relative tolerance of 0.001. Please use the QuadMesh element for irregularly sampled data or set a higher tolerance on hv.config.image_rtol or the rtol parameter in the Image constructor.\n" + ] + }, + { + "data": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + ":DynamicMap [band]\n", + " :Overlay\n", + " .WMTS.I :WMTS [Longitude,Latitude]\n", + " .Image.I :Image [x,y] (band_data)" + ] + }, + "execution_count": 30, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1237" + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "ds.band_data.coarsen(x=10, y=10, boundary='pad').mean().persist().hvplot(x = 'x', y = 'y',\n", + " cmap='RdYlGn', alpha=0.7,\n", + " geo=True, tiles= 'CartoLight', width=700, height=700)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "66ac0b90-b91c-4bff-a777-f15fca84728d", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "client.close()" + ] + } + ], + "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.11.7" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/storage/setup-object-storage.md b/docs/storage/setup-object-storage.md new file mode 100644 index 0000000..1ef7b8c --- /dev/null +++ b/docs/storage/setup-object-storage.md @@ -0,0 +1,12 @@ +# Pangeo@EOSC s3 object storage + + +If you followed the setup instructions, your MinIO Pangeo@EOSC personal s3 object storage is ready to be used. However, to be able to access it via s3fs Python API, you need to set up **new Access keys**. + +## Create new access key + +In your web browser, go to [https://pangeo-eosc-minio.vm.fedcloud.eu](https://pangeo-eosc-minio.vm.fedcloud.eu) and login with your credentials: + +- In the left menu bar, click on **Access Keys** and **Create access key**. By default, new access and secret keys are created. Copy them so you can reuse them later. + +![minIO keys](../images/minIO_keys.png)