{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# `xarray-leaflet`\n", "\n", "`xarray-leaflet` ist eine xarray-Erweiterung für das Plotten von gekachelten Karten. Sowohl [xarray](http://xarray.pydata.org/) als auch [Leaflet](ipyleaflet.ipynb) können mit Datenfragmenten arbeiten, `xarray` durch [Dask Chunks](https://docs.dask.org/en/latest/array-chunks.html) und Leaflet durch *map tiles*. Mit `xarray-leaflet` arbeiten beide zusammen." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Installation\n", "\n", "Ihr könnt `xarray-leaflet` in eurem Jupyter-Kernel installieren mit:\n", "\n", "``` console\n", "$ pipenv install xarray-leaflet\n", "Installing xarray-leaflet…\n", "…\n", "``` \n", "\n", "Standardmäßig generiert `xarray-leaflet` Kacheln in temporären Verzeichnissen. Bei dynamischen Karten wird bei jeder Interaktion mit der Karte ein neues Verzeichnis erstellt, entweder durch Ziehen oder Zoomen. Dies liegt daran, dass eine direkte Zuordnung zwischen dem Kachelverzeichnis und der URL besteht, unter der die Kacheln bereitgestellt werden. Da bei dynamischen Karten Kacheln nicht vom Browser zwischengespeichert werden sollten, muss sich die URL ständig ändern. Diese temporären Verzeichnisse werden derzeit nicht automatisch bereinigt. Ihr solltet dies daher regelmäßig selbst tun. In ix-Systemen sind sie unter `/tmp/xarray_leaflet_*`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Beispiel\n", "\n", "Um das Beispiel ausführen zu können, müsst Ihr zusätzlich die folgenden Pakete in Eurem Kernel installieren:\n", "\n", "* requests\n", "* tqdm\n", "* matplotlib\n", "* scipy" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import requests\n", "import os\n", "from tqdm import tqdm\n", "import zipfile\n", "import xarray as xr\n", "import numpy as np\n", "import scipy.ndimage\n", "import matplotlib.pyplot as plt\n", "import xarray_leaflet\n", "from ipyleaflet import Map, basemaps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nun laden wir den [HydroSHEDS](https://hydrosheds.org/)-Datensatz herunter:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "url = 'https://edcintl.cr.usgs.gov/downloads/sciweb1/shared/hydrosheds/sa_30s_zip_grid/sa_acc_30s_grid.zip'\n", "filename = os.path.basename(url)\n", "name = filename[:filename.find('_grid')]\n", "adffile = name + '/' + name + '/w001001.adf'\n", "\n", "if not os.path.exists(adffile):\n", " r = requests.get(url, stream=True)\n", " with open(filename, 'wb') as f:\n", " total_length = int(r.headers.get('content-length'))\n", " for chunk in tqdm(r.iter_content(chunk_size=1024), total=(total_length/1024) + 1):\n", " if chunk:\n", " f.write(chunk)\n", " f.flush()\n", " zip = zipfile.ZipFile(filename)\n", " zip.extractall('.')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
[62366400 values with dtype=int32]
array([1])
array([ 14.995833, 14.9875 , 14.979167, ..., -55.979167, -55.9875 ,\n", " -55.995833])
array([-92.995833, -92.9875 , -92.979167, ..., -32.020833, -32.0125 ,\n", " -32.004167])