{ "metadata": { "name": "", "signature": "sha256:226eb42f053d4da563e4614eb832e56a383e6b4911e98a702ffb7155200d3c9d" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Interacting with raster features\n", "\n", "A raster feature is a continguous region of like pixels. Rasterio permits extraction of features into a vector data representation and the reverse operation, \"burning\" vector data into a raster or image." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extracting features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rasterizing features\n", "\n", "Given a source of GeoJSON-like geometry objects or objects that provide the Python Geo Interface, you can \"burn\" these into a raster dataset." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from rasterio.transform import Affine" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "def transform_from_corner(ulx, uly, dx, dy):\n", " return Affine.translation(ulx, uly)*Affine.scale(dx, -dy)\n", "\n", "print transform_from_corner(bounds[0], bounds[3], 1.0/3600, 1.0/3600).to_gdal()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(119.52, 0.0002777777777777778, 0.0, -20.5, 0.0, -0.0002777777777777778)\n" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "from rasterio.features import rasterize\n", "from shapely.geometry import Polygon, mapping\n", "\n", "# image transform\n", "bounds = (119.52, -21.6, 120.90, -20.5)\n", "transform = transform_from_corner(bounds[0], bounds[3], 1.0/3600, 1.0/3600)\n", "\n", "# Make raster image, burn in vector data which lies completely inside the bounding box\n", "poly = Polygon(((120, -21), (120.5, -21), (120.5, -21.2), (120, -21.2)))\n", "output = rasterize([poly], transform=transform, out_shape=(3961, 4969))\n", "print output" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[0 0 0 ..., 0 0 0]\n", " [0 0 0 ..., 0 0 0]\n", " [0 0 0 ..., 0 0 0]\n", " ..., \n", " [0 0 0 ..., 0 0 0]\n", " [0 0 0 ..., 0 0 0]\n", " [0 0 0 ..., 0 0 0]]\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(output)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAUIAAAEACAYAAADGPX/7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF+5JREFUeJzt3W1oW+fh9/Gvgg2ltCl5McveOQGlsRxXiWqLpcperJDg\nOg/u4rlkt++6W+y0KQwHNncpZe2rNoPV7sYobTdBGR6YFBLnflE7jEW4pXH6tKrUsymr9ieCySDJ\nsmmWZTitW6fx9X+R9NxxE9uJn+T6+n3ggH1JR7ouSL45Rw85PmOMQUTEYmsKPQERkUJTCEXEegqh\niFhPIRQR6ymEImI9hVBErLesIYzH41RWVhIMBnnhhReW86lFRGbkW67PEV6+fJlNmzbx5ptv4jgO\n9913H8eOHeOee+5ZjqcXEZnRsh0Rfvjhh5SXlxMIBCguLubhhx+mt7d3uZ5eRGRGyxbCXC7H+vXr\nvd9d1yWXyy3X04uIzGjZQujz+ZbrqUREbknRcj2R4zhkMhnv90wmg+u60+6jWIrIUprpLZFlC+HW\nrVtJpVIMDw/z3e9+l+7ubo4dO3aDez67XFMqkH5ge4HnsJT60fq+7fpZnWs8MuMtyxbCoqIi/vCH\nP7Br1y4uX77MwYMH9Y6xiKwIyxZCgD179rBnz57lfEoRkTnpmyXLLlDoCSyxQKEnsMQChZ7AMggU\negLLTiFcdoFCT2CJBQo9gSUWKPQElkGg0BNYdgqhiFhPIRQR6ymEImI9hVBErKcQioj1FEIRsZ5C\nKCLWUwhFxHoKoYhYTyEUEesphCJiPYVQRKynEIqI9RRCEbGeQigi1lMIRcR6CqGIWG9BIQwEAtx7\n771EIhGi0SgA58+fp7a2loqKCnbu3MmFCxe8+7e3txMMBqmsrKSvr29hMxcRWSQLCqHP56O/v5/B\nwUE+/PBDADo6OqitreXs2bPU1NTQ0dEBQDKZpLu7m2QySTwe59ChQ0xNTS18BSIiC7TgU+NvXjD5\n5MmTtLS0ANDS0kJPTw8Avb29NDU1UVxcTCAQoLy83IuniEghLfiI8IEHHmDr1q386U9/AmBsbAy/\n3w+A3+9nbGwMgJGREVzX9fZ1XZdcLreQpxcRWRQLuq7xe++9R1lZGZ9++im1tbVUVlZOu93n8+Hz\n+Wbcf7bbRESWy4JCWFZWBsB3vvMdHnroIT788EP8fj+jo6OUlpaSz+cpKSkBwHEcMpmMt282m8Vx\nnBs8av81Pwew8dKCIrIYhq9uc5v3qfHnn3/O+Pg4AJ999hl9fX2Ew2Hq6+vp6uoCoKuri4aGBgDq\n6+s5fvw4k5OTpNNpUqmU907zdNuv2QLznZ6IWC/A9J7MbN5HhGNjYzz00EMAfPXVV/zkJz9h586d\nbN26lcbGRjo7OwkEApw4cQKAUChEY2MjoVCIoqIiYrGYTo1FZEXwmW++7VtAV8L4bKGnISKr0pHr\nPuXyNX2zRESspxCKiPUUQhGxnkIoItZTCEXEegqhiFhPIRQR6ymEImI9hVBErKcQioj1FEIRsZ5C\nKCLWUwhFxHoKoYhYTyEUEesphCJiPYVQRKynEIqI9RRCEbGeQigi1pszhI899hh+v59wOOyNnT9/\nntraWioqKti5cycXLlzwbmtvbycYDFJZWUlfX583PjAwQDgcJhgM0tbWtsjLEBGZvzlD+OijjxKP\nx6eNdXR0UFtby9mzZ6mpqaGjowOAZDJJd3c3yWSSeDzOoUOHvKtGtba20tnZSSqVIpVKXfeYIiKF\nMmcI77//ftatWzdt7OTJk7S0tADQ0tJCT08PAL29vTQ1NVFcXEwgEKC8vJxEIkE+n2d8fNy7oHtz\nc7O3j4hIoc3rNcKxsTH8fj8Afr+fsbExAEZGRnBd17uf67rkcrnrxh3HIZfLLWTeIiKLpmihD+Dz\n+a5emH2x9F/zc+DqJiJyq4avbnObVwj9fj+jo6OUlpaSz+cpKSkBrhzpZTIZ737ZbBbXdXEch2w2\nO23ccZwZHn37fKYkIvINAaYfSJ2Z8Z7zOjWur6+nq6sLgK6uLhoaGrzx48ePMzk5STqdJpVKEY1G\nKS0tZe3atSQSCYwxHD161NtHRKTQ5jwibGpq4syZM5w7d47169fz61//mqeffprGxkY6OzsJBAKc\nOHECgFAoRGNjI6FQiKKiImKxmHfaHIvFOHDgABMTE9TV1bF79+6lXZmIyE3yma8/37ICXInms4We\nhoisSkeYKXf6ZomIWE8hFBHrKYQiYj2FUESspxCKiPUUQhGxnkIoItZTCEXEegqhiFhPIRQR6ymE\nImI9hVBErKcQioj1FEIRsZ5CKCLWUwhFxHoKoYhYTyEUEesphCJivTlD+Nhjj+H3+wmHw97Yc889\nh+u6RCIRIpEIp06d8m5rb28nGAxSWVlJX1+fNz4wMEA4HCYYDNLW1rbIyxARmb85Q/joo48Sj8en\njfl8Pg4fPszg4CCDg4Ps2bMHgGQySXd3N8lkkng8zqFDh7yLpbS2ttLZ2UkqlSKVSl33mCIihTJn\nCO+//37WrVt33fiNrgbV29tLU1MTxcXFBAIBysvLSSQS5PN5xsfHiUajADQ3N9PT07MI0xcRWbh5\nv0b4yiuvUFVVxcGDB7lw4QIAIyMjuK7r3cd1XXK53HXjjuOQy+UWMG0RkcUzrxC2traSTqcZGhqi\nrKyMJ598chGn1H/NNryIjysidhlmek9mVjSfhy8pKfF+fvzxx9m7dy9w5Ugvk8l4t2WzWVzXxXEc\nstnstHHHcWZ49O3zmZKIyDcErm5fOzPjPed1RJjP572fX3/9de8d5fr6eo4fP87k5CTpdJpUKkU0\nGqW0tJS1a9eSSCQwxnD06FEaGhrm89QiIotuziPCpqYmzpw5w7lz51i/fj1Hjhyhv7+foaEhfD4f\nGzZs4NVXXwUgFArR2NhIKBSiqKiIWCyGz+cDIBaLceDAASYmJqirq2P37t1LuzIRkZvkMzd6+7dA\nrkTz2UJPQ0RWpSM3/LQL6JslIiIKoYiIQigi1lMIRcR6CqGIWE8hFBHrKYQiYj2FUESspxCKiPUU\nQhGxnkIoItZTCEXEevP6/whldXuWI4WegnzD/1BJN/+30NNYtXREKCLWUwhFxHoKoYhYTyEUEesp\nhCJiPYVQRKw3awgzmQw7duxg8+bNbNmyhZdffhmA8+fPU1tbS0VFBTt37vQu8A7Q3t5OMBiksrKS\nvr4+b3xgYIBwOEwwGKStrW2JliMicutmDWFxcTEvvvgin3zyCR988AF//OMf+ec//0lHRwe1tbWc\nPXuWmpoaOjo6AEgmk3R3d5NMJonH4xw6dMi7WEprayudnZ2kUilSqRTxeHzpVycichNmDWFpaSnV\n1dUA3HHHHdxzzz3kcjlOnjxJS0sLAC0tLfT09ADQ29tLU1MTxcXFBAIBysvLSSQS5PN5xsfHiUaj\nADQ3N3v7iIgU2k2/Rjg8PMzg4CDbtm1jbGwMv98PgN/vZ2xsDICRkRFc1/X2cV2XXC533bjjOORy\nucVag4jIgtzUV+wuXrzIvn37eOmll7jzzjun3ebz+byLuC+O/mt+DlzdRERu1fDVbW5zhvDSpUvs\n27eP/fv309DQAFw5ChwdHaW0tJR8Pk9JSQlw5Ugvk8l4+2azWVzXxXEcstnstHHHcWZ4xu03NXER\nkdkFmH4gdWbGe856amyM4eDBg4RCIZ544glvvL6+nq6uLgC6urq8QNbX13P8+HEmJydJp9OkUimi\n0SilpaWsXbuWRCKBMYajR496+4iIFNqsR4Tvvfcer732Gvfeey+RSAS48vGYp59+msbGRjo7OwkE\nApw4cQKAUChEY2MjoVCIoqIiYrGYd9oci8U4cOAAExMT1NXVsXv37iVemojIzfGZrz/fsgJcieaz\nhZ6G9fTfcK08+m+4FsMRZsqdvlkiItZTCEXEegqhiFhPIRQR6ymEImI9hVBErKcQioj1FEIRsZ5C\nKCLWUwhFxHoKoYhYTyEUEesphCJiPYVQRKynEIqI9RRCEbGeQigi1lMIRcR6CqGIWG/WEGYyGXbs\n2MHmzZvZsmULL7/8MgDPPfccrusSiUSIRCKcOnXK26e9vZ1gMEhlZSV9fX3e+MDAAOFwmGAwSFtb\n2xItR0Tk1s16Fbvi4mJefPFFqquruXjxIt/73veora3F5/Nx+PBhDh8+PO3+yWSS7u5ukskkuVyO\nBx54gFQqhc/no7W1lc7OTqLRKHV1dcTjcV3JTkRWhFmPCEtLS6murgbgjjvu4J577iGXywHc8GpQ\nvb29NDU1UVxcTCAQoLy8nEQiQT6fZ3x8nGg0CkBzczM9PT2LvRYRkXm56dcIh4eHGRwc5Pvf/z4A\nr7zyClVVVRw8eJALFy4AMDIyguu63j6u65LL5a4bdxzHC6qISKHdVAgvXrzIj3/8Y1566SXuuOMO\nWltbSafTDA0NUVZWxpNPPrnU8xQRWTKzvkYIcOnSJfbt28dPf/pTGhoaACgpKfFuf/zxx9m7dy9w\n5Ugvk8l4t2WzWVzXxXEcstnstHHHcWZ4xv5rfg5c3WQ5JQkVegryDTlm+vsiMxu+us1t1hAaYzh4\n8CChUIgnnnjCG8/n85SVlQHw+uuvEw6HAaivr+eRRx7h8OHD5HI5UqkU0WgUn8/H2rVrSSQSRKNR\njh49yi9+8YsZnnX7TU1cls7/4/8UegoiiyDA9AOpMzPec9YQvvfee7z22mvce++9RCIRAJ5//nmO\nHTvG0NAQPp+PDRs28OqrrwIQCoVobGwkFApRVFRELBbD5/MBEIvFOHDgABMTE9TV1ekdYxFZMXzm\nRm//FsiVaD5b6GmIyKp05IafdgF9s0RERCEUEVEIRcR6CqGIWE8hFBHrKYQiYj2FUESspxCKiPUU\nQhGxnkIoItZTCEXEegqhiFhPIRQR6ymEImI9hVBErKcQioj1FEIRsZ5CKCLWUwhFxHqzhvCLL75g\n27ZtVFdXEwqFeOaZZwA4f/48tbW1VFRUsHPnTu8C7wDt7e0Eg0EqKyvp6+vzxgcGBgiHwwSDQdra\n2pZoOSIit27WEN52222cPn2aoaEhPv74Y06fPs27775LR0cHtbW1nD17lpqaGjo6OgBIJpN0d3eT\nTCaJx+McOnTIu1hKa2srnZ2dpFIpUqkU8Xh86VcnInIT5jw1vv322wGYnJzk8uXLrFu3jpMnT9LS\n0gJAS0sLPT09APT29tLU1ERxcTGBQIDy8nISiQT5fJ7x8XGi0SgAzc3N3j4iIoU2Zwinpqaorq7G\n7/ezY8cONm/ezNjYGH6/HwC/38/Y2BgAIyMjuK7r7eu6Lrlc7rpxx3HI5XKLvRYRkXmZ9QLvAGvW\nrGFoaIj//ve/7Nq1i9OnT0+73efzeRdxFxH5NpozhF+76667ePDBBxkYGMDv9zM6OkppaSn5fJ6S\nkhLgypFeJpPx9slms7iui+M4ZLPZaeOO48zwTP3X/By4uomI3Krhq9vcZj01PnfunPeO8MTEBG+8\n8QaRSIT6+nq6uroA6OrqoqGhAYD6+nqOHz/O5OQk6XSaVCpFNBqltLSUtWvXkkgkMMZw9OhRb5/r\nbb9mC9zUIkRErhdgek9mNusRYT6fp6WlhampKaampti/fz81NTVEIhEaGxvp7OwkEAhw4sQJAEKh\nEI2NjYRCIYqKiojFYt5pcywW48CBA0xMTFBXV8fu3bsXukoRkUXhM19/vmUFuBLNZws9DRFZlY4w\nU+70zRIRsZ5CKCLWUwhFxHoKoYhYTyEUEesphCJiPYVQRKynEIqI9RRCEbGeQigi1lMIRcR6CqGI\nWE8hFBHrKYQiYj2FUESspxCKiPUUQhGxnkIoItZTCEXEerOG8IsvvmDbtm1UV1cTCoV45plnAHju\nuedwXZdIJEIkEuHUqVPePu3t7QSDQSorK+nr6/PGBwYGCIfDBINB2tralmg5IiK3btar2N12222c\nPn2a22+/na+++oof/OAHvPvuu/h8Pg4fPszhw4en3T+ZTNLd3U0ymSSXy/HAAw+QSqXw+Xy0trbS\n2dlJNBqlrq6OeDyuK9mJyIow56nx7bffDsDk5CSXL19m3bp1ADe8GlRvby9NTU0UFxcTCAQoLy8n\nkUiQz+cZHx8nGo0C0NzcTE9Pz2KuQ0Rk3uYM4dTUFNXV1fj9fnbs2MHmzZsBeOWVV6iqquLgwYPe\nReBHRkZwXdfb13VdcrncdeOO45DL5RZ7LSIi8zJnCNesWcPQ0BDZbJa3336b/v5+WltbSafTDA0N\nUVZWxpNPPrkccxURWRKzvkZ4rbvuuosHH3yQjz76iO3bt3vjjz/+OHv37gWuHOllMhnvtmw2i+u6\nOI5DNpudNu44zgzP1H/Nz4Grm4jIrRq+us1t1iPCc+fOeae9ExMTvPHGG0QiEUZHR737vP7664TD\nYQDq6+s5fvw4k5OTpNNpUqkU0WiU0tJS1q5dSyKRwBjD0aNHaWhomOFZt1+zBW5qESIi1wswvScz\nm/WIMJ/P09LSwtTUFFNTU+zfv5+amhqam5sZGhrC5/OxYcMGXn31VQBCoRCNjY2EQiGKioqIxWL4\nfD4AYrEYBw4cYGJigrq6Or1jLCIrhs/c6O3fArkSzWcLPQ0RWZWO3PDTLqBvloiIKIQiIgqhiFhP\nIRQR6ymEImI9hVBErKcQioj1FEIRsZ5CKCLWUwhFxHoKoYhYTyEUEesphCJiPYVQRKynEIqI9RRC\nEbGeQigi1lMIRcR6CuGyGy70BJbYcKEnsMSGCz2BZTBc6AksO4Vw2Q0XegJLbLjQE1hiw4WewDIY\nLvQElp1CKCLWUwhFxHor8HKeIiJLY6bczXqB9+W2gposIhbRqbGIWE8hFBHrrZgQxuNxKisrCQaD\nvPDCC4Wezk177LHH8Pv9hMNhb+z8+fPU1tZSUVHBzp07uXDhgndbe3s7wWCQyspK+vr6vPGBgQHC\n4TDBYJC2trZlXcNsMpkMO3bsYPPmzWzZsoWXX34ZWD1r/OKLL9i2bRvV1dWEQiGeeeYZYPWs72uX\nL18mEomwd+9eYPWtb8HMCvDVV1+ZjRs3mnQ6bSYnJ01VVZVJJpOFntZNefvtt83f//53s2XLFm/s\nqaeeMi+88IIxxpiOjg7zq1/9yhhjzCeffGKqqqrM5OSkSafTZuPGjWZqasoYY8x9991nEomEMcaY\nPXv2mFOnTi3zSm4sn8+bwcFBY4wx4+PjpqKiwiSTyVW1xs8++8wYY8ylS5fMtm3bzDvvvLOq1meM\nMb///e/NI488Yvbu3WuMWV1/RhfDigjh+++/b3bt2uX93t7ebtrb2ws4o1uTTqenhXDTpk1mdHTU\nGHMlJJs2bTLGGPP888+bjo4O7367du0yf/vb38zIyIiprKz0xo8dO2Z+9rOfLdPsb82PfvQj88Yb\nb6zKNX722Wdm69at5h//+MeqWl8mkzE1NTXmrbfeMj/84Q+NMav7z+h8rIhT41wux/r1673fXdcl\nl8sVcEYLMzY2ht/vB8Dv9zM2NgbAyMgIrut69/t6nd8cdxxnRa5/eHiYwcFBtm3btqrWODU1RXV1\nNX6/33sZYDWt75e//CW/+93vWLPm//91X03rWwwrIoSr+fODPp9vVazv4sWL7Nu3j5deeok777xz\n2m3f9jWuWbOGoaEhstksb7/9NqdPn552+7d5fX/5y18oKSkhEonM+PG0b/P6FsuKCKHjOGQyGe/3\nTCYz7V+fbxu/38/o6CgA+XyekpIS4Pp1ZrNZXNfFcRyy2ey0ccdxlnfSs7h06RL79u1j//79NDQ0\nAKtvjQB33XUXDz74IAMDA6tmfe+//z4nT55kw4YNNDU18dZbb7F///5Vs75FU+hzc2OuvEh99913\nm3Q6bb788stv1Zslxlz/GuFTTz3lvc7S3t5+3QvRX375pfnXv/5l7r77bu+F6Gg0aj744AMzNTW1\nol6InpqaMvv37zdPPPHEtPHVssZPP/3U/Oc//zHGGPP555+b+++/37z55purZn3X6u/v914jXI3r\nW4gVEUJjjPnrX/9qKioqzMaNG83zzz9f6OnctIcfftiUlZWZ4uJi47qu+fOf/2z+/e9/m5qaGhMM\nBk1tba33F80YY37zm9+YjRs3mk2bNpl4PO6Nf/TRR2bLli1m48aN5uc//3khlnJD77zzjvH5fKaq\nqspUV1eb6upqc+rUqVWzxo8//thEIhFTVVVlwuGw+e1vf2uMMatmfdfq7+/33jVejetbiBX1XWMR\nkUJYEa8RiogUkkIoItZTCEXEegqhiFhPIRQR6ymEImI9hVBErKcQioj1/hcL2ljDYNVURAAAAABJ\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "import json\n", "\n", "output = rasterize([json.dumps(mapping(poly))], transform=transform, out_shape=(3961, 4969))\n", "print output" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "ERROR:rasterio:Geometry '{\"type\": \"Polygon\", \"coordinates\": [[[120.0, -21.0], [120.5, -21.0], [120.5, -21.2], [120.0, -21.2], [120.0, -21.0]]]}' at index 0 with value 255 skipped\n" ] } ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }