{ "metadata": { "name": "", "signature": "sha256:43448490895891c0065b66ecc3922de1faf27dbfc41e2985754a4b64e3762ecd" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Integrating with GeoPandas and Numpy\n", "\n", "`rasterstats` has mainly operated on file-based vector and raster data sources. As of version `0.4`, we've added the ability to work with in-memory representations of vector and raster data:\n", "\n", "* [GeoPandas](http://geopandas.org) provides a `GeoDataFrame` for vector data\n", "* [Numpy](http://www.numpy.org/) provide `ndarrays` which can be used as a raster data source (with some additional metadata for georeferencing)\n", "\n", "In this example you'll learn how to load vectors into `GeoDataFrames` and rasters into `ndarrays` and inspect the results. Then we'll run zonal statistics on the two datasets, bring it back into a `GeoDataFrames` and write the results to a GeoJSON file." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vector Data via GeoPandas\n", "Let's load up some example vector data into a GeoDataFrame. We can see the shapes plotted as a map" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import geopandas as gpd\n", "geodf = gpd.GeoDataFrame.from_file('../tests/data/polygons.shp')\n", "geodf.plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "... or view it as a table" ] }, { "cell_type": "code", "collapsed": false, "input": [ "geodf" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryid
0 POLYGON ((244697.4517952438 1000369.230757494,... 1
1 POLYGON ((246082.2236020251 1000453.156321541,... 2
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ " geometry id\n", "0 POLYGON ((244697.4517952438 1000369.230757494,... 1\n", "1 POLYGON ((246082.2236020251 1000453.156321541,... 2" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Raster Data via Numpy\n", "\n", "We can use the `rasterio` package to bring GDAL-supported data formats into our python session as numpy arrays. Note that we need to keep track of the georeferencing explicitly by storing the `transform` tuple." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import rasterio\n", "with rasterio.open(\"../tests/data/slope.tif\") as src:\n", " transform = src.meta['transform']\n", " array = src.read_band(1)\n", "\n", "print (transform)\n", "array" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[244300.61494985913, 25.52514657450613, 0.0, 1000868.7876863468, 0.0, -25.52514657450613]\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "array([[-9999., -9999., -9999., ..., -9999., -9999., -9999.],\n", " [-9999., 0., 0., ..., 0., 0., -9999.],\n", " [-9999., 0., 0., ..., 0., 0., -9999.],\n", " ..., \n", " [-9999., 0., 0., ..., 0., 0., -9999.],\n", " [-9999., 0., 0., ..., 0., 0., -9999.],\n", " [-9999., -9999., -9999., ..., -9999., -9999., -9999.]], dtype=float32)" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because it's an `ndarray`, we have the entire numpy and scipy world available to us to work on the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "array_chop = array[5:-5,5:-5] # chop off the outer 5 pixels" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "With a few lines of matplotlib glue, we can plot a map of the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "plt.imshow(array_chop, interpolation='nearest')\n", "plt.colorbar()\n", "plt.title('Slope Map')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running zonal statistics on GeoDataFrames and ndarrays\n", "\n", "Now that we have our vectors and raster data loaded into the python session, we can work with `zonal_stats` directly rather than serializing them to disk." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from rasterstats import zonal_stats\n", "zonal_stats(geodf, array)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "RasterStatsError", "evalue": "Must provide the 'transform' kwarg when using ndarrays as src raster", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mRasterStatsError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mrasterstats\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mzonal_stats\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mzonal_stats\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgeodf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0marray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m/home/mperry/src/python-raster-stats/src/rasterstats/main.pyc\u001b[0m in \u001b[0;36mzonal_stats\u001b[1;34m(vectors, raster, layer_num, band, nodata_value, global_src_extent, categorical, stats, copy_properties, all_touched, transform)\u001b[0m\n\u001b[0;32m 58\u001b[0m \u001b[1;31m# must have transform arg\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 59\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mtransform\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 60\u001b[1;33m raise RasterStatsError(\"Must provide the 'transform' kwarg when \"\\\n\u001b[0m\u001b[0;32m 61\u001b[0m \"using ndarrays as src raster\")\n\u001b[0;32m 62\u001b[0m \u001b[0mrgt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtransform\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mRasterStatsError\u001b[0m: Must provide the 'transform' kwarg when using ndarrays as src raster" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "What happened? Because the ndarrays are not geo-aware (they are just in array coordinates) we need to specify the `transform` tuple to specify exactly how the cells align with our spatial reference system.\n", "\n", "The tuple contains 6 elements which correspond to:\n", "\n", "0. top left easting or X coordinate\n", "1. West-East pixel resolution\n", "2. rotation (typically 0 if image is \"north up\")\n", "3. top left northing or Y coordinate\n", "4. rotation, (typically 0 if image is \"north up\")\n", "5. North-South pixel resolution (typically -1 * W-E resolution)\n", "\n", "You can construct this by hand if necessary but it's handy to use the coordinates from the source dataset, provided the dimensions of the array have not changed. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "transform" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "[244300.61494985913,\n", " 25.52514657450613,\n", " 0.0,\n", " 1000868.7876863468,\n", " 0.0,\n", " -25.52514657450613]" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the array and the transform information, we can run `zonal_stats` without complaint." ] }, { "cell_type": "code", "collapsed": false, "input": [ "stats = zonal_stats(geodf, array, transform=transform)\n", "stats" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "[{'__fid__': 0,\n", " 'count': 75,\n", " 'max': 22.273418426513672,\n", " 'mean': 14.660084635416666,\n", " 'min': 6.575114727020264},\n", " {'__fid__': 1,\n", " 'count': 50,\n", " 'max': 82.69043731689453,\n", " 'mean': 56.6057470703125,\n", " 'min': 16.940950393676758}]" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Back to GeoDataFrames\n", "\n", "The \"list of dicts\" representation of zonal statistics is helpful but we will often want to join these attributes back to the original `GeoDataFrame` in order to continue working with them. For example, we may want to do some additional calculations and write it out to a GeoJSON file.\n", "\n", "Luckily (geo)pandas has some very intuitive constructors and methods that make this simple:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "\n", "new_geodf = geodf.join(pd.DataFrame(stats))\n", "new_geodf" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryid__fid__countmaxmeanmin
0 POLYGON ((244697.4517952438 1000369.230757494,... 1 0 75 22.273418 14.660085 6.575115
1 POLYGON ((246082.2236020251 1000453.156321541,... 2 1 50 82.690437 56.605747 16.940950
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ " geometry id __fid__ count \\\n", "0 POLYGON ((244697.4517952438 1000369.230757494,... 1 0 75 \n", "1 POLYGON ((246082.2236020251 1000453.156321541,... 2 1 50 \n", "\n", " max mean min \n", "0 22.273418 14.660085 6.575115 \n", "1 82.690437 56.605747 16.940950 " ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And to write it out to a vector file like GeoJSON\n", "\n", "** This currently does not work because the geodf.join method returns as standard DataFrame, not a GeoDataFrame! This bug should be fixed shortly... **" ] }, { "cell_type": "code", "collapsed": false, "input": [ "## Hack around it for now\n", "new_geodf.__class__ = gpd.GeoDataFrame\n", "new_geodf.crs = {}\n", "new_geodf.set_geometry('geometry')\n", "## /hack\n", "\n", "! rm /tmp/polygons_with_slope.geojson\n", "new_geodf.to_file('/tmp/polygons_with_slope.geojson', driver=\"GeoJSON\")\n", "\n", "# Confirm that everything works according to OGR\n", "! ogrinfo -ro -al /tmp/polygons_with_slope.geojson" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "INFO: Open of `/tmp/polygons_with_slope.geojson'\r\n", " using driver `GeoJSON' successful.\r\n", "\r\n", "Layer name: OGRGeoJSON\r\n", "Geometry: Polygon\r\n", "Feature Count: 2\r\n", "Extent: (244697.451795, 1000132.713259) - (246189.037956, 1000460.785918)\r\n", "Layer SRS WKT:\r\n", "GEOGCS[\"WGS 84\",\r\n", " DATUM[\"WGS_1984\",\r\n", " SPHEROID[\"WGS 84\",6378137,298.257223563,\r\n", " AUTHORITY[\"EPSG\",\"7030\"]],\r\n", " AUTHORITY[\"EPSG\",\"6326\"]],\r\n", " PRIMEM[\"Greenwich\",0,\r\n", " AUTHORITY[\"EPSG\",\"8901\"]],\r\n", " UNIT[\"degree\",0.0174532925199433,\r\n", " AUTHORITY[\"EPSG\",\"9122\"]],\r\n", " AUTHORITY[\"EPSG\",\"4326\"]]\r\n", "FID Column = id\r\n", "id: Integer (0.0)\r\n", "__fid__: Integer (0.0)\r\n", "count: Integer (0.0)\r\n", "max: Real (0.0)\r\n", "mean: Real (0.0)\r\n", "min: Real (0.0)\r\n", "OGRFeature(OGRGeoJSON):1\r\n", " id (Integer) = 1\r\n", " __fid__ (Integer) = 0\r\n", " count (Integer) = 75\r\n", " max (Real) = 22.2734184265137\r\n", " mean (Real) = 14.6600846354167\r\n", " min (Real) = 6.57511472702026\r\n", " POLYGON ((244697.451795243832748 1000369.230757493642159,244827.154939680622192 1000373.045555859454907,244933.969293922709767 1000353.971564030507579,244933.969293922709767 1000353.971564030507579,244930.154495556926122 1000147.97245227789972,244697.451795243832748 1000159.41684737522155,244697.451795243832748 1000369.230757493642159))\r\n", "\r\n", "OGRFeature(OGRGeoJSON):2\r\n", " id (Integer) = 2\r\n", " __fid__ (Integer) = 1\r\n", " count (Integer) = 50\r\n", " max (Real) = 82.6904373168945\r\n", " mean (Real) = 56.6057470703125\r\n", " min (Real) = 16.9409503936768\r\n", " POLYGON ((246082.223602025071159 1000453.156321540940553,246139.445577511884039 1000460.78591827256605,246189.03795626712963 1000403.563942785724066,246189.03795626712963 1000403.563942785724066,246086.038400390854804 1000132.71325881476514,245990.668441246147268 1000205.194427764741704,246082.223602025071159 1000453.156321540940553))\r\n", "\r\n" ] } ], "prompt_number": 33 } ], "metadata": {} } ] }