From 0f135d33e0ebc762c11c57424dffc903d0cac63f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lu=C3=ADs=20de=20Sousa?= <luis.de.sousa@protonmail.ch>
Date: Fri, 6 Dec 2019 17:20:48 +0100
Subject: [PATCH] Adapted to 2019 services

---
 WCS-getExtent.ipynb | 141 +++++++++++++++++++++
 WCS.ipynb           | 271 ----------------------------------------
 WCS_basics.ipynb    | 293 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 434 insertions(+), 271 deletions(-)
 create mode 100644 WCS-getExtent.ipynb
 delete mode 100644 WCS.ipynb
 create mode 100644 WCS_basics.ipynb

diff --git a/WCS-getExtent.ipynb b/WCS-getExtent.ipynb
new file mode 100644
index 0000000..bcb4007
--- /dev/null
+++ b/WCS-getExtent.ipynb
@@ -0,0 +1,141 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "This time a connection is made to the service for soil pH:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from owslib.wcs import WebCoverageService\n",
+    "wcs = WebCoverageService('http://maps.isric.org/mapserv?map=/map/phh2o.map', version='1.0.0')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "A bounding box broadly matching Senegal:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bbox = (-1784000, 1356000, -1140000, 1863000)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now fetch the coverage for Senegal:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "response = wcs.getCoverage(\n",
+    "    identifier='phh20_0-5cm_mean', \n",
+    "    crs='urn:ogc:def:crs:EPSG::152160',\n",
+    "    bbox=bbox, \n",
+    "    resx=1, resy=1, \n",
+    "    format='GeoTIFF')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "with open('./data/Senegal_pH_0-5_mean.tif', 'wb') as file:\n",
+    "    file.write(response.read())"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "With the data on the client side some regular interaction can be started with a library like resterIO:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "RasterioIOError",
+     "evalue": "'./data/Senegal_CEC0m.tif' not recognized as a supported file format.",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mCPLE_OpenFailedError\u001b[0m                      Traceback (most recent call last)",
+      "\u001b[0;32mrasterio/_base.pyx\u001b[0m in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;32mrasterio/_shim.pyx\u001b[0m in \u001b[0;36mrasterio._shim.open_dataset\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;32mrasterio/_err.pyx\u001b[0m in \u001b[0;36mrasterio._err.exc_wrap_pointer\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;31mCPLE_OpenFailedError\u001b[0m: './data/Senegal_CEC0m.tif' not recognized as a supported file format.",
+      "\nDuring handling of the above exception, another exception occurred:\n",
+      "\u001b[0;31mRasterioIOError\u001b[0m                           Traceback (most recent call last)",
+      "\u001b[0;32m<ipython-input-14-3c4dada614d1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mrasterio\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mCEC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrasterio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./data/Senegal_CEC0m.tif\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"GTiff\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCEC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtitle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Cation Exchange Capacity at 0 metres in Senegal'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'gist_ncar'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/usr/lib/python3/dist-packages/rasterio/env.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m    428\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    429\u001b[0m         \u001b[0;32mwith\u001b[0m \u001b[0menv_ctor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 430\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    431\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    432\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/usr/lib/python3/dist-packages/rasterio/__init__.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, width, height, count, crs, transform, dtype, nodata, sharing, **kwargs)\u001b[0m\n\u001b[1;32m    214\u001b[0m         \u001b[0;31m# None.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    215\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 216\u001b[0;31m             \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDatasetReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msharing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msharing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    217\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r+'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    218\u001b[0m             \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_writer_for_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msharing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msharing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32mrasterio/_base.pyx\u001b[0m in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;31mRasterioIOError\u001b[0m: './data/Senegal_CEC0m.tif' not recognized as a supported file format."
+     ]
+    }
+   ],
+   "source": [
+    "import rasterio\n",
+    "CEC = rasterio.open(\"./data/Senegal_CEC0m.tif\", driver=\"GTiff\")\n",
+    "show(CEC, title='Cation Exchange Capacity at 0 metres in Senegal', cmap='gist_ncar')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Next steps:\n",
+    "https://publicwiki.deltares.nl/display/OET/WCS+primer\n",
+    "https://geoscripting-wur.github.io/PythonRaster/"
+   ]
+  }
+ ],
+ "metadata": {
+  "@webio": {
+   "lastCommId": "C7CD903630FF4971A278510DC0E27447",
+   "lastKernelId": "5e40268c-f755-4e83-aec6-935c11d843f6"
+  },
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.6.9"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/WCS.ipynb b/WCS.ipynb
deleted file mode 100644
index 5399d1e..0000000
--- a/WCS.ipynb
+++ /dev/null
@@ -1,271 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [
-    {
-     "ename": "ServiceException",
-     "evalue": "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>401 Unauthorized</title>\n</head><body>\n<h1>Unauthorized</h1>\n<p>This server could not verify that you\nare authorized to access the document\nrequested.  Either you supplied the wrong\ncredentials (e.g., bad password), or your\nbrowser doesn't understand how to supply\nthe credentials required.</p>\n<hr>\n<address>Apache/2.4.29 (Ubuntu) Server at maps.isric.org Port 80</address>\n</body></html>\n",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[0;31mServiceException\u001b[0m                          Traceback (most recent call last)",
-      "\u001b[0;32m<ipython-input-3-85257035e0f7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mowslib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutil\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mAuthentication\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mauth\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mAuthentication\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"luis\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"coruja\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mwcs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mWebCoverageService\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'http://maps.isric.org/mapserv?map=/map/bdod2.map'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mversion\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'1.0.0'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mauth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mauth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwcs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontents\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/owslib/wcs.py\u001b[0m in \u001b[0;36mWebCoverageService\u001b[0;34m(url, version, xml, cookies, timeout, auth)\u001b[0m\n\u001b[1;32m     42\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mversion\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'1.0.0'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     43\u001b[0m         return wcs100.WebCoverageService_1_0_0.__new__(\n\u001b[0;32m---> 44\u001b[0;31m             wcs100.WebCoverageService_1_0_0, clean_url, xml, cookies, auth=auth)\n\u001b[0m\u001b[1;32m     45\u001b[0m     \u001b[0;32melif\u001b[0m \u001b[0mversion\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'1.1.0'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     46\u001b[0m         return wcs110.WebCoverageService_1_1_0.__new__(\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/owslib/coverage/wcsBase.py\u001b[0m in \u001b[0;36m__new__\u001b[0;34m(self, url, xml, cookies, auth)\u001b[0m\n\u001b[1;32m     51\u001b[0m         \"\"\"\n\u001b[1;32m     52\u001b[0m         \u001b[0mobj\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__new__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m         \u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxml\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcookies\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mauth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mauth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     54\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcookies\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcookies\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     55\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_describeCoverage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m \u001b[0;31m#cache for DescribeCoverage responses\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/owslib/coverage/wcs100.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, url, xml, cookies, auth)\u001b[0m\n\u001b[1;32m     51\u001b[0m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_capabilities\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadString\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxml\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     52\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_capabilities\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     55\u001b[0m         \u001b[0;31m# check for exceptions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/owslib/coverage/wcsBase.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self, service_url, timeout)\u001b[0m\n\u001b[1;32m    116\u001b[0m         \"\"\"\n\u001b[1;32m    117\u001b[0m         \u001b[0mrequest\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcapabilities_url\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mservice_url\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 118\u001b[0;31m         \u001b[0mu\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopenURL\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcookies\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcookies\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mauth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    119\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0metree\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromstring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/owslib/util.py\u001b[0m in \u001b[0;36mopenURL\u001b[0;34m(url_base, data, method, cookies, username, password, timeout, headers, verify, cert, auth)\u001b[0m\n\u001b[1;32m    199\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    200\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus_code\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m400\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m401\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 201\u001b[0;31m         \u001b[0;32mraise\u001b[0m \u001b[0mServiceException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    202\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    203\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus_code\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m404\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m500\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m502\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m503\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m504\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m    \u001b[0;31m# add more if needed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;31mServiceException\u001b[0m: <!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>401 Unauthorized</title>\n</head><body>\n<h1>Unauthorized</h1>\n<p>This server could not verify that you\nare authorized to access the document\nrequested.  Either you supplied the wrong\ncredentials (e.g., bad password), or your\nbrowser doesn't understand how to supply\nthe credentials required.</p>\n<hr>\n<address>Apache/2.4.29 (Ubuntu) Server at maps.isric.org Port 80</address>\n</body></html>\n"
-     ]
-    }
-   ],
-   "source": [
-    "from owslib.wcs import WebCoverageService\n",
-    "from owslib.util import Authentication\n",
-    "auth = Authentication(\"luis\", \"coruja\")\n",
-    "wcs = WebCoverageService('http://maps.isric.org/mapserv?map=/map/bdod2.map', version='1.0.0', auth=auth)\n",
-    "print(list(wcs.contents))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "['GetCapabilities', 'DescribeCoverage', 'GetCoverage']\n"
-     ]
-    }
-   ],
-   "source": [
-    "print([op.name for op in wcs.operations])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "That is a large set of coverages, but it is easy to filter the dictionary. For instance, to get the name of all SoilGrids coverages:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "['sg250m:ACDWRB_M_ss_250m', 'sg250m:AWCh1_M_sl1_250m', 'sg250m:AWCh1_M_sl2_250m', 'sg250m:AWCh1_M_sl3_250m', 'sg250m:AWCh1_M_sl4_250m', 'sg250m:AWCh1_M_sl5_250m', 'sg250m:AWCh1_M_sl6_250m', 'sg250m:AWCh1_M_sl7_250m', 'sg250m:AWCh2_M_sl1_250m', 'sg250m:AWCh2_M_sl2_250m', 'sg250m:AWCh2_M_sl3_250m', 'sg250m:AWCh2_M_sl4_250m', 'sg250m:AWCh2_M_sl5_250m', 'sg250m:AWCh2_M_sl6_250m', 'sg250m:AWCh2_M_sl7_250m', 'sg250m:AWCh3_M_sl1_250m', 'sg250m:AWCh3_M_sl2_250m', 'sg250m:AWCh3_M_sl3_250m', 'sg250m:AWCh3_M_sl4_250m', 'sg250m:AWCh3_M_sl5_250m', 'sg250m:AWCh3_M_sl6_250m', 'sg250m:AWCh3_M_sl7_250m', 'sg250m:AWCtS_M_sl1_250m', 'sg250m:AWCtS_M_sl2_250m', 'sg250m:AWCtS_M_sl3_250m', 'sg250m:AWCtS_M_sl4_250m', 'sg250m:AWCtS_M_sl5_250m', 'sg250m:AWCtS_M_sl6_250m', 'sg250m:AWCtS_M_sl7_250m', 'sg250m:BDRICM_M_250m', 'sg250m:BDRLOG_M_250m', 'sg250m:BDTICM_M_250m', 'sg250m:BLDFIE_M_sl1_250m', 'sg250m:BLDFIE_M_sl2_250m', 'sg250m:BLDFIE_M_sl3_250m', 'sg250m:BLDFIE_M_sl4_250m', 'sg250m:BLDFIE_M_sl5_250m', 'sg250m:BLDFIE_M_sl6_250m', 'sg250m:BLDFIE_M_sl7_250m', 'sg250m:CECSOL_M_sl1_250m', 'sg250m:CECSOL_M_sl2_250m', 'sg250m:CECSOL_M_sl3_250m', 'sg250m:CECSOL_M_sl4_250m', 'sg250m:CECSOL_M_sl5_250m', 'sg250m:CECSOL_M_sl6_250m', 'sg250m:CECSOL_M_sl7_250m', 'sg250m:CLYPPT_M_sl1_250m', 'sg250m:CLYPPT_M_sl2_250m', 'sg250m:CLYPPT_M_sl3_250m', 'sg250m:CLYPPT_M_sl4_250m', 'sg250m:CLYPPT_M_sl5_250m', 'sg250m:CLYPPT_M_sl6_250m', 'sg250m:CLYPPT_M_sl7_250m', 'sg250m:CRFVOL_M_sl1_250m', 'sg250m:CRFVOL_M_sl2_250m', 'sg250m:CRFVOL_M_sl3_250m', 'sg250m:CRFVOL_M_sl4_250m', 'sg250m:CRFVOL_M_sl5_250m', 'sg250m:CRFVOL_M_sl6_250m', 'sg250m:CRFVOL_M_sl7_250m', 'sg250m:HISTPR_250m', 'sg250m:OCDENS_M_sl1_250m', 'sg250m:OCDENS_M_sl2_250m', 'sg250m:OCDENS_M_sl3_250m', 'sg250m:OCDENS_M_sl4_250m', 'sg250m:OCDENS_M_sl5_250m', 'sg250m:OCDENS_M_sl6_250m', 'sg250m:OCDENS_M_sl7_250m', 'sg250m:OCSTHA_M_100cm_250m', 'sg250m:OCSTHA_M_200cm_250m', 'sg250m:OCSTHA_M_30cm_250m', 'sg250m:OCSTHA_M_sd1_250m', 'sg250m:OCSTHA_M_sd2_250m', 'sg250m:OCSTHA_M_sd3_250m', 'sg250m:OCSTHA_M_sd4_250m', 'sg250m:OCSTHA_M_sd5_250m', 'sg250m:OCSTHA_M_sd6_250m', 'sg250m:ORCDRC_M_sl1_250m', 'sg250m:ORCDRC_M_sl2_250m', 'sg250m:ORCDRC_M_sl3_250m', 'sg250m:ORCDRC_M_sl4_250m', 'sg250m:ORCDRC_M_sl5_250m', 'sg250m:ORCDRC_M_sl6_250m', 'sg250m:ORCDRC_M_sl7_250m', 'sg250m:PHIHOX_M_sl1_250m', 'sg250m:PHIHOX_M_sl2_250m', 'sg250m:PHIHOX_M_sl3_250m', 'sg250m:PHIHOX_M_sl4_250m', 'sg250m:PHIHOX_M_sl5_250m', 'sg250m:PHIHOX_M_sl6_250m', 'sg250m:PHIHOX_M_sl7_250m', 'sg250m:PHIKCL_M_sl1_250m', 'sg250m:PHIKCL_M_sl2_250m', 'sg250m:PHIKCL_M_sl3_250m', 'sg250m:PHIKCL_M_sl4_250m', 'sg250m:PHIKCL_M_sl5_250m', 'sg250m:PHIKCL_M_sl6_250m', 'sg250m:PHIKCL_M_sl7_250m', 'sg250m:SLGWRB_250m', 'sg250m:SLTPPT_M_sl1_250m', 'sg250m:SLTPPT_M_sl2_250m', 'sg250m:SLTPPT_M_sl3_250m', 'sg250m:SLTPPT_M_sl4_250m', 'sg250m:SLTPPT_M_sl5_250m', 'sg250m:SLTPPT_M_sl6_250m', 'sg250m:SLTPPT_M_sl7_250m', 'sg250m:SNDPPT_M_sl1_250m', 'sg250m:SNDPPT_M_sl2_250m', 'sg250m:SNDPPT_M_sl3_250m', 'sg250m:SNDPPT_M_sl4_250m', 'sg250m:SNDPPT_M_sl5_250m', 'sg250m:SNDPPT_M_sl6_250m', 'sg250m:SNDPPT_M_sl7_250m', 'sg250m:TAXNWRB_250m', 'sg250m:TAXNWRB_Acric.Ferralsols_250m', 'sg250m:TAXNWRB_Acric.Plinthosols_250m', 'sg250m:TAXNWRB_Albic.Arenosols_250m', 'sg250m:TAXNWRB_Albic.Luvisols_250m', 'sg250m:TAXNWRB_Alic.Nitisols_250m', 'sg250m:TAXNWRB_Aluandic.Andosols_250m', 'sg250m:TAXNWRB_Aric.Regosols_250m', 'sg250m:TAXNWRB_Calcaric.Regosols_250m', 'sg250m:TAXNWRB_Calcic.Chernozems_250m', 'sg250m:TAXNWRB_Calcic.Gleysols_250m', 'sg250m:TAXNWRB_Calcic.Gypsisols_250m', 'sg250m:TAXNWRB_Calcic.Histosols_250m', 'sg250m:TAXNWRB_Calcic.Kastanozems_250m', 'sg250m:TAXNWRB_Calcic.Luvisols_250m', 'sg250m:TAXNWRB_Calcic.Solonetz_250m', 'sg250m:TAXNWRB_Calcic.Vertisols_250m', 'sg250m:TAXNWRB_Cryic.Histosols_250m', 'sg250m:TAXNWRB_Cutanic.Alisols_250m', 'sg250m:TAXNWRB_Endogleyic.Cambisols_250m', 'sg250m:TAXNWRB_Endogleyic.Planosols_250m', 'sg250m:TAXNWRB_Ferralic.Arenosols_250m', 'sg250m:TAXNWRB_Ferralic.Cambisols_250m', 'sg250m:TAXNWRB_Fibric.Histosols_250m', 'sg250m:TAXNWRB_Gleyic.Luvisols_250m', 'sg250m:TAXNWRB_Gleyic.Podzols_250m', 'sg250m:TAXNWRB_Gleyic.Solonetz_250m', 'sg250m:TAXNWRB_Gypsic.Solonchaks_250m', 'sg250m:TAXNWRB_Haplic.Acrisols..Alumic._250m', 'sg250m:TAXNWRB_Haplic.Acrisols..Ferric._250m', 'sg250m:TAXNWRB_Haplic.Acrisols..Humic._250m', 'sg250m:TAXNWRB_Haplic.Acrisols_250m', 'sg250m:TAXNWRB_Haplic.Albeluvisols_250m', 'sg250m:TAXNWRB_Haplic.Alisols_250m', 'sg250m:TAXNWRB_Haplic.Andosols_250m', 'sg250m:TAXNWRB_Haplic.Arenosols..Calcaric._250m', 'sg250m:TAXNWRB_Haplic.Arenosols_250m', 'sg250m:TAXNWRB_Haplic.Calcisols..Sodic._250m', 'sg250m:TAXNWRB_Haplic.Calcisols_250m', 'sg250m:TAXNWRB_Haplic.Cambisols..Calcaric._250m', 'sg250m:TAXNWRB_Haplic.Cambisols..Chromic._250m', 'sg250m:TAXNWRB_Haplic.Cambisols..Dystric._250m', 'sg250m:TAXNWRB_Haplic.Cambisols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Cambisols..Humic._250m', 'sg250m:TAXNWRB_Haplic.Cambisols..Sodic._250m', 'sg250m:TAXNWRB_Haplic.Cambisols_250m', 'sg250m:TAXNWRB_Haplic.Chernozems_250m', 'sg250m:TAXNWRB_Haplic.Cryosols_250m', 'sg250m:TAXNWRB_Haplic.Ferralsols..Rhodic._250m', 'sg250m:TAXNWRB_Haplic.Ferralsols..Xanthic._250m', 'sg250m:TAXNWRB_Haplic.Ferralsols_250m', 'sg250m:TAXNWRB_Haplic.Fluvisols..Arenic._250m', 'sg250m:TAXNWRB_Haplic.Fluvisols..Calcaric._250m', 'sg250m:TAXNWRB_Haplic.Fluvisols..Dystric._250m', 'sg250m:TAXNWRB_Haplic.Fluvisols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Fluvisols_250m', 'sg250m:TAXNWRB_Haplic.Gleysols..Dystric._250m', 'sg250m:TAXNWRB_Haplic.Gleysols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Gleysols_250m', 'sg250m:TAXNWRB_Haplic.Gypsisols_250m', 'sg250m:TAXNWRB_Haplic.Kastanozems_250m', 'sg250m:TAXNWRB_Haplic.Leptosols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Leptosols_250m', 'sg250m:TAXNWRB_Haplic.Lixisols..Chromic._250m', 'sg250m:TAXNWRB_Haplic.Lixisols..Ferric._250m', 'sg250m:TAXNWRB_Haplic.Lixisols_250m', 'sg250m:TAXNWRB_Haplic.Luvisols..Chromic._250m', 'sg250m:TAXNWRB_Haplic.Luvisols..Ferric._250m', 'sg250m:TAXNWRB_Haplic.Luvisols_250m', 'sg250m:TAXNWRB_Haplic.Nitisols..Rhodic._250m', 'sg250m:TAXNWRB_Haplic.Phaeozems_250m', 'sg250m:TAXNWRB_Haplic.Planosols..Dystric._250m', 'sg250m:TAXNWRB_Haplic.Planosols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Podzols_250m', 'sg250m:TAXNWRB_Haplic.Regosols..Dystric._250m', 'sg250m:TAXNWRB_Haplic.Regosols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Regosols..Sodic._250m', 'sg250m:TAXNWRB_Haplic.Solonchaks..Sodic._250m', 'sg250m:TAXNWRB_Haplic.Solonchaks_250m', 'sg250m:TAXNWRB_Haplic.Solonetz_250m', 'sg250m:TAXNWRB_Haplic.Umbrisols_250m', 'sg250m:TAXNWRB_Haplic.Vertisols..Eutric._250m', 'sg250m:TAXNWRB_Haplic.Vertisols_250m', 'sg250m:TAXNWRB_Hemic.Histosols_250m', 'sg250m:TAXNWRB_Histic.Albeluvisols_250m', 'sg250m:TAXNWRB_Hypoluvic.Arenosols_250m', 'sg250m:TAXNWRB_Leptic.Cambisols_250m', 'sg250m:TAXNWRB_Leptic.Luvisols_250m', 'sg250m:TAXNWRB_Leptic.Phaeozems_250m', 'sg250m:TAXNWRB_Leptic.Regosols_250m', 'sg250m:TAXNWRB_Leptic.Umbrisols_250m', 'sg250m:TAXNWRB_Lithic.Leptosols_250m', 'sg250m:TAXNWRB_Lixic.Plinthosols_250m', 'sg250m:TAXNWRB_Luvic.Calcisols_250m', 'sg250m:TAXNWRB_Luvic.Chernozems_250m', 'sg250m:TAXNWRB_Luvic.Phaeozems_250m', 'sg250m:TAXNWRB_Luvic.Planosols_250m', 'sg250m:TAXNWRB_Luvic.Stagnosols_250m', 'sg250m:TAXNWRB_Mollic.Gleysols_250m', 'sg250m:TAXNWRB_Mollic.Leptosols_250m', 'sg250m:TAXNWRB_Mollic.Solonetz_250m', 'sg250m:TAXNWRB_Mollic.Vertisols_250m', 'sg250m:TAXNWRB_Petric.Calcisols_250m', 'sg250m:TAXNWRB_Petric.Durisols_250m', 'sg250m:TAXNWRB_Plinthic.Acrisols_250m', 'sg250m:TAXNWRB_Protic.Arenosols_250m', 'sg250m:TAXNWRB_Rendzic.Leptosols_250m', 'sg250m:TAXNWRB_Sapric.Histosols_250m', 'sg250m:TAXNWRB_Solodic.Planosols_250m', 'sg250m:TAXNWRB_Stagnic.Luvisols_250m', 'sg250m:TAXNWRB_Turbic.Cryosols_250m', 'sg250m:TAXNWRB_Umbric.Albeluvisols_250m', 'sg250m:TAXNWRB_Umbric.Ferralsols_250m', 'sg250m:TAXNWRB_Umbric.Gleysols_250m', 'sg250m:TAXNWRB_Vertic.Cambisols_250m', 'sg250m:TAXNWRB_Vertic.Luvisols_250m', 'sg250m:TAXNWRB_Vetic.Acrisols_250m', 'sg250m:TAXNWRB_Vitric.Andosols_250m', 'sg250m:TAXNWRB_Vitric.Cryosols_250m', 'sg250m:TAXOUSDA_250m', 'sg250m:TAXOUSDA_Albolls_250m', 'sg250m:TAXOUSDA_Aqualfs_250m', 'sg250m:TAXOUSDA_Aquands_250m', 'sg250m:TAXOUSDA_Aquents_250m', 'sg250m:TAXOUSDA_Aquepts_250m', 'sg250m:TAXOUSDA_Aquerts_250m', 'sg250m:TAXOUSDA_Aquods_250m', 'sg250m:TAXOUSDA_Aquolls_250m', 'sg250m:TAXOUSDA_Aquox_250m', 'sg250m:TAXOUSDA_Aquults_250m', 'sg250m:TAXOUSDA_Arents_250m', 'sg250m:TAXOUSDA_Argids_250m', 'sg250m:TAXOUSDA_Borolls_250m', 'sg250m:TAXOUSDA_Calcids_250m', 'sg250m:TAXOUSDA_Cambids_250m', 'sg250m:TAXOUSDA_Cryalfs_250m', 'sg250m:TAXOUSDA_Cryands_250m', 'sg250m:TAXOUSDA_Cryepts_250m', 'sg250m:TAXOUSDA_Cryids_250m', 'sg250m:TAXOUSDA_Cryods_250m', 'sg250m:TAXOUSDA_Cryolls_250m', 'sg250m:TAXOUSDA_Durids_250m', 'sg250m:TAXOUSDA_Fibrists_250m', 'sg250m:TAXOUSDA_Fluvents_250m', 'sg250m:TAXOUSDA_Folists_250m', 'sg250m:TAXOUSDA_Gelands_250m', 'sg250m:TAXOUSDA_Gelepts_250m', 'sg250m:TAXOUSDA_Gelods_250m', 'sg250m:TAXOUSDA_Gypsids_250m', 'sg250m:TAXOUSDA_Hemists_250m', 'sg250m:TAXOUSDA_Histels_250m', 'sg250m:TAXOUSDA_Humods_250m', 'sg250m:TAXOUSDA_Humults_250m', 'sg250m:TAXOUSDA_Ochrepts_250m', 'sg250m:TAXOUSDA_Orthels_250m', 'sg250m:TAXOUSDA_Orthents_250m', 'sg250m:TAXOUSDA_Orthods_250m', 'sg250m:TAXOUSDA_Perox_250m', 'sg250m:TAXOUSDA_Psamments_250m', 'sg250m:TAXOUSDA_Rendolls_250m', 'sg250m:TAXOUSDA_Salids_250m', 'sg250m:TAXOUSDA_Saprists_250m', 'sg250m:TAXOUSDA_Torrands_250m', 'sg250m:TAXOUSDA_Torrerts_250m', 'sg250m:TAXOUSDA_Torrox_250m', 'sg250m:TAXOUSDA_Turbels_250m', 'sg250m:TAXOUSDA_Udalfs_250m', 'sg250m:TAXOUSDA_Udands_250m', 'sg250m:TAXOUSDA_Udepts_250m', 'sg250m:TAXOUSDA_Uderts_250m', 'sg250m:TAXOUSDA_Udolls_250m', 'sg250m:TAXOUSDA_Udox_250m', 'sg250m:TAXOUSDA_Udults_250m', 'sg250m:TAXOUSDA_Ustalfs_250m', 'sg250m:TAXOUSDA_Ustands_250m', 'sg250m:TAXOUSDA_Ustepts_250m', 'sg250m:TAXOUSDA_Usterts_250m', 'sg250m:TAXOUSDA_Ustolls_250m', 'sg250m:TAXOUSDA_Ustox_250m', 'sg250m:TAXOUSDA_Ustults_250m', 'sg250m:TAXOUSDA_Vitrands_250m', 'sg250m:TAXOUSDA_Xeralfs_250m', 'sg250m:TAXOUSDA_Xerands_250m', 'sg250m:TAXOUSDA_Xerepts_250m', 'sg250m:TAXOUSDA_Xererts_250m', 'sg250m:TAXOUSDA_Xerolls_250m', 'sg250m:TAXOUSDA_Xerults_250m', 'sg250m:TEXMHT_M_sl1_250m', 'sg250m:TEXMHT_M_sl2_250m', 'sg250m:TEXMHT_M_sl3_250m', 'sg250m:TEXMHT_M_sl4_250m', 'sg250m:TEXMHT_M_sl5_250m', 'sg250m:TEXMHT_M_sl6_250m', 'sg250m:TEXMHT_M_sl7_250m', 'sg250m:WWP_M_sl1_250m', 'sg250m:WWP_M_sl2_250m', 'sg250m:WWP_M_sl3_250m', 'sg250m:WWP_M_sl4_250m', 'sg250m:WWP_M_sl5_250m', 'sg250m:WWP_M_sl6_250m', 'sg250m:WWP_M_sl7_250m']\n"
-     ]
-    }
-   ],
-   "source": [
-    "names = [k for k in wcs.contents.keys() if k.startswith(\"sg250m\")]\n",
-    "print(names)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Or to search for all the coverages regarding cation exchange capacity (CEC):"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "['sg250m:CECSOL_M_sl1_250m', 'sg250m:CECSOL_M_sl2_250m', 'sg250m:CECSOL_M_sl3_250m', 'sg250m:CECSOL_M_sl4_250m', 'sg250m:CECSOL_M_sl5_250m', 'sg250m:CECSOL_M_sl6_250m', 'sg250m:CECSOL_M_sl7_250m']\n"
-     ]
-    }
-   ],
-   "source": [
-    "cec_covs = [k for k in wcs.contents.keys() if k.find(\"CECSOL\") != -1]\n",
-    "print(cec_covs)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "These are the SoilGrids predictions for CEC at the seven standard depths.\n",
-    "\n",
-    "The details for one of these coverages can be inspected using the identifiers above:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[urn:ogc:def:crs:EPSG::4326]"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "cec0cm = wcs.contents['sg250m:CECSOL_M_sl1_250m']\n",
-    "cec0cm.supportedCRS"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['ArcGrid', 'GeoTIFF', 'GIF', 'Gtopo30', 'ImageMosaic', 'JPEG', 'PNG', 'TIFF']"
-      ]
-     },
-     "execution_count": 7,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "cec0cm.supportedFormats"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A bounding box broadly matching Senegal:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "bbox = (-17.1, 12.65, -13.15, 14.95) "
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now fetch the coverage for Senegal:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "response = wcs.getCoverage(\n",
-    "    identifier='sg250m:CECSOL_M_sl1_250m', \n",
-    "    crs='urn:ogc:def:crs:EPSG::4326',\n",
-    "    bbox=bbox, \n",
-    "    resx=1, resy=1, \n",
-    "    format='GeoTIFF')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "with open('./data/Senegal_CEC0m.tif', 'wb') as file:\n",
-    "    file.write(response.read())"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "With the data on the client side some regular interaction can be started with a library like resterIO:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "ename": "RasterioIOError",
-     "evalue": "'./data/Senegal_CEC0m.tif' not recognized as a supported file format.",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[0;31mCPLE_OpenFailedError\u001b[0m                      Traceback (most recent call last)",
-      "\u001b[0;32mrasterio/_base.pyx\u001b[0m in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n",
-      "\u001b[0;32mrasterio/_shim.pyx\u001b[0m in \u001b[0;36mrasterio._shim.open_dataset\u001b[0;34m()\u001b[0m\n",
-      "\u001b[0;32mrasterio/_err.pyx\u001b[0m in \u001b[0;36mrasterio._err.exc_wrap_pointer\u001b[0;34m()\u001b[0m\n",
-      "\u001b[0;31mCPLE_OpenFailedError\u001b[0m: './data/Senegal_CEC0m.tif' not recognized as a supported file format.",
-      "\nDuring handling of the above exception, another exception occurred:\n",
-      "\u001b[0;31mRasterioIOError\u001b[0m                           Traceback (most recent call last)",
-      "\u001b[0;32m<ipython-input-14-3c4dada614d1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mrasterio\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mCEC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrasterio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./data/Senegal_CEC0m.tif\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"GTiff\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCEC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtitle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Cation Exchange Capacity at 0 metres in Senegal'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'gist_ncar'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/rasterio/env.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m    428\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    429\u001b[0m         \u001b[0;32mwith\u001b[0m \u001b[0menv_ctor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 430\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    431\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    432\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32m/usr/lib/python3/dist-packages/rasterio/__init__.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, width, height, count, crs, transform, dtype, nodata, sharing, **kwargs)\u001b[0m\n\u001b[1;32m    214\u001b[0m         \u001b[0;31m# None.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    215\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 216\u001b[0;31m             \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDatasetReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msharing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msharing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    217\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r+'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    218\u001b[0m             \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_writer_for_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msharing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msharing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;32mrasterio/_base.pyx\u001b[0m in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n",
-      "\u001b[0;31mRasterioIOError\u001b[0m: './data/Senegal_CEC0m.tif' not recognized as a supported file format."
-     ]
-    }
-   ],
-   "source": [
-    "import rasterio\n",
-    "CEC = rasterio.open(\"./data/Senegal_CEC0m.tif\", driver=\"GTiff\")\n",
-    "show(CEC, title='Cation Exchange Capacity at 0 metres in Senegal', cmap='gist_ncar')"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Next steps:\n",
-    "https://publicwiki.deltares.nl/display/OET/WCS+primer\n",
-    "https://geoscripting-wur.github.io/PythonRaster/"
-   ]
-  }
- ],
- "metadata": {
-  "@webio": {
-   "lastCommId": "CDDA2476DA3848E283992C81E6F7DFAE",
-   "lastKernelId": "bc6b6543-4fef-4e17-972e-8a9f3ffe950d"
-  },
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.6.8"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/WCS_basics.ipynb b/WCS_basics.ipynb
new file mode 100644
index 0000000..ed9be7d
--- /dev/null
+++ b/WCS_basics.ipynb
@@ -0,0 +1,293 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "First load the `WebCoverageService` class from the OWSLib and create a connection to a service:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from owslib.wcs import WebCoverageService\n",
+    "wcs = WebCoverageService('http://maps.isric.org/mapserv?map=/map/bdod.map', version='1.0.0')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "A bounding box broadly matching Senegal:"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The absense of errors means that a connection was sucessfully established. To get more information about this service, start by identifying the operations available from this service:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['GetCapabilities', 'DescribeCoverage', 'GetCoverage']\n"
+     ]
+    }
+   ],
+   "source": [
+    "print([op.name for op in wcs.operations])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The full list of coverages available from this service is in the `contents` property:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['bdod_15-30cm_Q0.95', 'bdod_0-5cm_mean', 'bdod_5-15cm_Q0.95', 'bdod_15-30cm_Q0.5', 'bdod_30-60cm_Q0.05', 'bdod_100-200cm_Q0.05', 'bdod_15-30cm_Q0.05', 'bdod_100-200cm_Q0.95', 'bdod_0-5cm_Q0.5', 'bdod_0-5cm_Q0.05', 'bdod_5-15cm_Q0.5', 'bdod_100-200cm_mean', 'bdod_60-100cm_Q0.95', 'bdod_5-15cm_Q0.05', 'bdod_30-60cm_mean', 'bdod_5-15cm_mean', 'bdod_100-200cm_Q0.5', 'bdod_30-60cm_Q0.95', 'bdod_15-30cm_mean', 'bdod_0-5cm_Q0.95', 'bdod_60-100cm_Q0.05', 'bdod_60-100cm_Q0.5', 'bdod_60-100cm_mean', 'bdod_30-60cm_Q0.5']\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(list(wcs.contents))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "That is a large set of coverages, but it is easy to filter the dictionary. For instance, to get the name of all  coverages for the 0 cm to 5 cm depth interval:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['bdod_0-5cm_mean', 'bdod_0-5cm_Q0.5', 'bdod_0-5cm_Q0.05', 'bdod_0-5cm_Q0.95']\n"
+     ]
+    }
+   ],
+   "source": [
+    "names = [k for k in wcs.contents.keys() if k.startswith(\"bdod_0-5cm\")]\n",
+    "print(names)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Or to search for all the coverages reporting the median prediction:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['bdod_15-30cm_Q0.5', 'bdod_0-5cm_Q0.5', 'bdod_5-15cm_Q0.5', 'bdod_100-200cm_Q0.5', 'bdod_60-100cm_Q0.5', 'bdod_30-60cm_Q0.5']\n"
+     ]
+    }
+   ],
+   "source": [
+    "q0_5_covs = [k for k in wcs.contents.keys() if k.find(\"Q0.5\") != -1]\n",
+    "print(q0_5_covs)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "These are the SoilGrids predictions for bulk density for the six standard depths defined in the GlobalSoilMap specifications.\n",
+    "\n",
+    "The details for one of these coverages can be inspected using the identifiers above:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[urn:ogc:def:crs:EPSG::152160, urn:ogc:def:crs:EPSG::152160]"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "bdod_5_15_median = wcs.contents['bdod_5-15cm_Q0.5']\n",
+    "bdod_5_15_median.supportedCRS"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['GEOTIFF_16']"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "bdod_5_15_median.supportedFormats"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bbox = (-17.1, 12.65, -13.15, 14.95) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now fetch the coverage for Senegal:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "response = wcs.getCoverage(\n",
+    "    identifier='phh20_0-5cm_mean', \n",
+    "    crs='urn:ogc:def:crs:EPSG::152160',\n",
+    "    bbox=bbox, \n",
+    "    resx=1, resy=1, \n",
+    "    format='GeoTIFF')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "with open('./data/Senegal_CEC0m.tif', 'wb') as file:\n",
+    "    file.write(response.read())"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "With the data on the client side some regular interaction can be started with a library like resterIO:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "RasterioIOError",
+     "evalue": "'./data/Senegal_CEC0m.tif' not recognized as a supported file format.",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mCPLE_OpenFailedError\u001b[0m                      Traceback (most recent call last)",
+      "\u001b[0;32mrasterio/_base.pyx\u001b[0m in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;32mrasterio/_shim.pyx\u001b[0m in \u001b[0;36mrasterio._shim.open_dataset\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;32mrasterio/_err.pyx\u001b[0m in \u001b[0;36mrasterio._err.exc_wrap_pointer\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;31mCPLE_OpenFailedError\u001b[0m: './data/Senegal_CEC0m.tif' not recognized as a supported file format.",
+      "\nDuring handling of the above exception, another exception occurred:\n",
+      "\u001b[0;31mRasterioIOError\u001b[0m                           Traceback (most recent call last)",
+      "\u001b[0;32m<ipython-input-14-3c4dada614d1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mrasterio\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mCEC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrasterio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"./data/Senegal_CEC0m.tif\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"GTiff\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCEC\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtitle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Cation Exchange Capacity at 0 metres in Senegal'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'gist_ncar'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/usr/lib/python3/dist-packages/rasterio/env.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m    428\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    429\u001b[0m         \u001b[0;32mwith\u001b[0m \u001b[0menv_ctor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 430\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    431\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    432\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/usr/lib/python3/dist-packages/rasterio/__init__.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, width, height, count, crs, transform, dtype, nodata, sharing, **kwargs)\u001b[0m\n\u001b[1;32m    214\u001b[0m         \u001b[0;31m# None.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    215\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 216\u001b[0;31m             \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDatasetReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msharing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msharing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    217\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r+'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    218\u001b[0m             \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_writer_for_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdriver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msharing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msharing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32mrasterio/_base.pyx\u001b[0m in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n",
+      "\u001b[0;31mRasterioIOError\u001b[0m: './data/Senegal_CEC0m.tif' not recognized as a supported file format."
+     ]
+    }
+   ],
+   "source": [
+    "import rasterio\n",
+    "CEC = rasterio.open(\"./data/Senegal_CEC0m.tif\", driver=\"GTiff\")\n",
+    "show(CEC, title='Cation Exchange Capacity at 0 metres in Senegal', cmap='gist_ncar')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Next steps:\n",
+    "https://publicwiki.deltares.nl/display/OET/WCS+primer\n",
+    "https://geoscripting-wur.github.io/PythonRaster/"
+   ]
+  }
+ ],
+ "metadata": {
+  "@webio": {
+   "lastCommId": "15E983DED5BA45E28DEE0958687E8D50",
+   "lastKernelId": "9ef91650-4d26-43d0-a331-f95652b81618"
+  },
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.6.9"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
-- 
GitLab