Skip to content

Instantly share code, notes, and snippets.

@kjordahl
Created July 15, 2016 19:52
Show Gist options
  • Save kjordahl/3ea5241f47f299b49bd57b36c74bb7b6 to your computer and use it in GitHub Desktop.
Save kjordahl/3ea5241f47f299b49bd57b36c74bb7b6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Demo of merging track points with a grid. The example grid is regular, but this will work with any arbitrary collection of polygons."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from geopandas import GeoSeries, GeoDataFrame\n",
"from geopandas import sjoin\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from shapely.geometry import Point, Polygon\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a regular grid of points"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x113dcb210>]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ncOCLiMwExMCf+lHpEQ5CA8VBaBjhIDRQHIQGisPVChM+Kj3CQWigOAgNIxyEBoqD0EBxuFrB1QqI\nBoqD0DDCQWigOAgNFIerFVytgGigOAgNIxyEBoqD0EBxuFrB1QqYBoqD0DDCQWigOAgNFIerFTbc\nICIyNVytICIiS3Hgi4jMBAe+iMhMcOCLiMwEB76IyExw4IuIzATEwJ/6bowRDkIDxUFoGOEgNFAc\nhAaKw106E96NMcJBaKA4CA0jHIQGioPQQHG4S8ddOogGioPQMMJBaKA4CA0Uh7t03KWDaKA4CA0j\nHIQGioPQQHG4S8ddOpgGioPQMMJBaKA4CA0Uh7t0NtwgIjI13KUjIiJLceCLiMyEEw38qvqNqvp6\nVf2gqt514M9urqqnquqxqnrPyTJFROSknPQ7/EeS/FqSf9r/yap6e5LfTPL2JO9L8umqOtZrTbIa\n991336YTtgofz3H4WG6eEw387n6iu59KcnCYX5/kzu7+n+5+OslTSa45yX3J0fA/qrH4eI7Dx3Lz\nrOs1/J9K8uy+j7+197lLMvWj0iMcoxqefdbHYqTjJI8n6evYtGNbnpsjHOjVCknuSfLwvssje7++\nf991dpK8a9/Hf5HkQ/s+vi3JB5b4J31UeoRjZEPVwscC8HjSvg7C3+nUn5sjHJterTDkffhVtZPk\n97v7wb2Pb9qL+eO9j+9Osujuf7nEbX0TvojICvQx34d/euB977/jLyS5o6r+NLsv5bwlyVcvdaPj\nBouIyGqc9G2ZN1TVs0neneTvq+ofk6S7H03yt0keTfIPSX6nR/yvhIiIrMzGVyuIiMirw8ZO2npo\na31U1aKqnquqB/cu1226aWpU1XVV9XhVPVlVn9h0z9Spqqer6l+r6mtVdcmXd2U5VXV7VV2oqof3\nfe6KqjpfVU9U1Zeq6vLDPJtcreChrfVya3e/a+9y96ZjpkRVnUryl0nem+QdST5YVW/bbNXkeTHJ\ntd39893tmZzj85nsPh/3c1OSe7v7rUm+nOTmwyQbG/jtoa114z+Sq3NNkqe6+5nufiHJndl9Xsrq\nVNzdtTLd/c9Jvn/g09cn+eze7z+b5IbDPMS/gGMd2pKlfLyqHqqq247yv3ryQxx8Dj4Xn4MnpZPc\nU1UPVNVHNx2zJVzZ3ReSpLu/m+TKw24w8m2ZL6Oq7kly1f5PZfcv/g+6+4vrvO9t55Ue2ySfTvJH\n3d1V9ckktyY59+pXivwfv9jd36mqN2Z38D+2912rjOPQd+CsdeB396+ucLNvJfmZfR//9N7nZB/H\neGz/Oon/uB6PbyX52X0f+xw8Id39nb1f/6Oq7sruy2YO/JNxoaqu6u4LVfWmJN877AaUl3QOHtq6\nsapeU1Vvzisc2pJLs/eX/xIfSPL1TbVMlAeSvKWqrq6q1yS5MbvPS1mBqnptVf3o3u9fl+Q98Tm5\nCpWXz8qP7P3+w0k+f5hgrd/hvxJVdUN2d+78RHYPbT3U3e/r7ker6qVDWy/EQ1ur8CdV9c7svjPi\n6SQf22zOtOjuH1TVx5Ocz+43Rbd392MbzpoyVyW5a2+Nyukkd3T3+Q03TYqq+lySa5P8eFV9M8ki\nyaeS/F1VnU3yTHbf3fjKHmepiMg8oLykIyIia8aBLyIyExz4IiIzwYEvIjITHPgiIjPBgS8iMhMc\n+CIiM8GBLyIyE/4XnO2WeSSVCCYAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x113cfb910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"N = 20\n",
"x = np.linspace(-10.0, 10.0, N+1)\n",
"y = np.linspace(-10.0, 10.0, N+1)\n",
"X, Y = np.meshgrid(x, y)\n",
"\n",
"plt.plot(X.ravel(), Y.ravel(), '.')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a list of polygons representing the grid cells."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"I, J = np.meshgrid(range(N), range(N))\n",
"idx = zip(I.ravel(), J.ravel())\n",
"\n",
"upper_left = zip(X[:N, :N].ravel(), Y[:N, :N].ravel())\n",
"upper_right = zip(X[1:, :N].ravel(), Y[1:, :N].ravel())\n",
"lower_left = zip(X[:N, 1:].ravel(), Y[:N, 1:].ravel())\n",
"lower_right = zip(X[1:, 1:].ravel(), Y[1:, 1:].ravel())\n",
"points = zip(upper_left, lower_left, lower_right, upper_right)\n",
"cells = [Polygon(pts) for pts in points]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load the cells in a `GeoSeries` and plot it."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x113d65690>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nRPkmAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x113d6d710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gs = GeoSeries(cells)\n",
"gs.plot(color='gray')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generate track line with a random walk until it leaves the domain."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"tx, ty = [0.0, 0.0], [0.0, 0.0]\n",
"scale = 0.1\n",
"while True:\n",
" nx = tx[-1] + scale * np.random.normal()\n",
" ny = ty[-1] + scale * np.random.normal()\n",
" if nx < -10 or nx > 10 or ny < -10 or ny > 10:\n",
" break\n",
" tx.append(nx)\n",
" ty.append(ny)\n",
"t = GeoSeries([Point(x, y) for x, y in zip(tx, ty)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Convert our grid cells and the track to `GeoDataFrame` objects and plot them."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x11af14f10>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x113d6db90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"grid = GeoDataFrame({}, geometry=gs)\n",
"track = GeoDataFrame({}, geometry=t)\n",
"ax = grid.plot(color='gray')\n",
"track.plot(ax=ax, color='black')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's the spatial join, where we find the cell index for each point in the track.\n",
"\n",
"Points on the boundary of cells will return the index of all cells that they touch."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" <th>index_right</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POINT (0 0)</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>POINT (0.128081097932255 0.1855029175647382)</td>\n",
" <td>210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>POINT (-0.002446857467254537 0.1627341412045903)</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>POINT (-0.06116750550792893 0.08778656599356688)</td>\n",
" <td>209</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>POINT (-0.01563912058913243 -0.001905538183850...</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>POINT (-0.03454186479423574 -0.07895009509970671)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>POINT (0.05777227110220089 -0.121482708363661)</td>\n",
" <td>190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>POINT (-0.04336074852723699 -0.07887971539965623)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>POINT (-0.2040862385199124 -0.2587198007368925)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>POINT (-0.2362151948996182 -0.3292472401642862)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>POINT (-0.3572899130332071 -0.4419917125181131)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>POINT (-0.4623907597270979 -0.4445057274771704)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>POINT (-0.4159217142669286 -0.4284978718135353)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>POINT (-0.5333037923901043 -0.4083595015494298)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>POINT (-0.438691289969138 -0.5542132330852421)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>POINT (-0.3852718180116098 -0.625782650303832)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>POINT (-0.3522970001130649 -0.5985174006523056)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>POINT (-0.3960097235648665 -0.6508290020255096)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>POINT (-0.4606406711623388 -0.6803582089729925)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>POINT (-0.568504826151878 -0.7221964199245303)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>POINT (-0.5606302203280751 -0.74635001850909)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>POINT (-0.6992612691859065 -0.6454553573844989)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>POINT (-0.6159593941226544 -0.7070961104629969)</td>\n",
" <td>189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11027</th>\n",
" <td>POINT (-0.4305385110916736 9.076234368239961)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11028</th>\n",
" <td>POINT (-0.4537681559524029 9.161142986905665)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11029</th>\n",
" <td>POINT (-0.2820377448943028 9.161271257397782)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11030</th>\n",
" <td>POINT (-0.3362987569862765 9.245027009306934)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11031</th>\n",
" <td>POINT (-0.4079040197712681 9.425093680088017)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11032</th>\n",
" <td>POINT (-0.4411635692407266 9.3666972585052)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11033</th>\n",
" <td>POINT (-0.5159205657547391 9.279545546905702)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11034</th>\n",
" <td>POINT (-0.3607472415548021 9.368373956946675)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11035</th>\n",
" <td>POINT (-0.296036553686887 9.268851166061744)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11036</th>\n",
" <td>POINT (-0.3965079435457004 9.410390412504745)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11037</th>\n",
" <td>POINT (-0.3715506573994599 9.2506129984639)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11038</th>\n",
" <td>POINT (-0.4893203439999804 9.312014173451992)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11039</th>\n",
" <td>POINT (-0.4091419101618364 9.296499068366757)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11040</th>\n",
" <td>POINT (-0.2396715681269344 9.365609617353719)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11041</th>\n",
" <td>POINT (-0.2052381913188682 9.372774637079004)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11042</th>\n",
" <td>POINT (-0.0725611128992317 9.322555803362294)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11043</th>\n",
" <td>POINT (-0.1071371662459003 9.382525296034267)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11044</th>\n",
" <td>POINT (-0.1902438357577092 9.408994076268105)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11045</th>\n",
" <td>POINT (-0.1521130755476637 9.536309382019757)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11046</th>\n",
" <td>POINT (-0.09021277761162953 9.623388679759447)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11047</th>\n",
" <td>POINT (0.04567327183286833 9.84502739087068)</td>\n",
" <td>390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11048</th>\n",
" <td>POINT (0.07352385919415433 9.871548063600704)</td>\n",
" <td>390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11049</th>\n",
" <td>POINT (-0.03412781031553851 9.73411378944385)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11050</th>\n",
" <td>POINT (0.05818398256509529 9.822144510541804)</td>\n",
" <td>390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11051</th>\n",
" <td>POINT (-0.01526728600292128 9.694190628712214)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11052</th>\n",
" <td>POINT (0.007312752895810504 9.798007971049278)</td>\n",
" <td>390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11053</th>\n",
" <td>POINT (0.0003221735375707304 9.773476537809671)</td>\n",
" <td>390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11054</th>\n",
" <td>POINT (-0.1529404673360687 9.778267263179336)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11055</th>\n",
" <td>POINT (0.01188548980026263 9.810784994069554)</td>\n",
" <td>390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11056</th>\n",
" <td>POINT (-0.02048703147162156 9.957768206221811)</td>\n",
" <td>389</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>11063 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" geometry index_right\n",
"0 POINT (0 0) 189\n",
"0 POINT (0 0) 190\n",
"0 POINT (0 0) 209\n",
"0 POINT (0 0) 210\n",
"1 POINT (0 0) 189\n",
"1 POINT (0 0) 190\n",
"1 POINT (0 0) 209\n",
"1 POINT (0 0) 210\n",
"2 POINT (0.128081097932255 0.1855029175647382) 210\n",
"3 POINT (-0.002446857467254537 0.1627341412045903) 209\n",
"4 POINT (-0.06116750550792893 0.08778656599356688) 209\n",
"5 POINT (-0.01563912058913243 -0.001905538183850... 189\n",
"6 POINT (-0.03454186479423574 -0.07895009509970671) 189\n",
"7 POINT (0.05777227110220089 -0.121482708363661) 190\n",
"8 POINT (-0.04336074852723699 -0.07887971539965623) 189\n",
"9 POINT (-0.2040862385199124 -0.2587198007368925) 189\n",
"10 POINT (-0.2362151948996182 -0.3292472401642862) 189\n",
"11 POINT (-0.3572899130332071 -0.4419917125181131) 189\n",
"12 POINT (-0.4623907597270979 -0.4445057274771704) 189\n",
"13 POINT (-0.4159217142669286 -0.4284978718135353) 189\n",
"14 POINT (-0.5333037923901043 -0.4083595015494298) 189\n",
"15 POINT (-0.438691289969138 -0.5542132330852421) 189\n",
"16 POINT (-0.3852718180116098 -0.625782650303832) 189\n",
"17 POINT (-0.3522970001130649 -0.5985174006523056) 189\n",
"18 POINT (-0.3960097235648665 -0.6508290020255096) 189\n",
"19 POINT (-0.4606406711623388 -0.6803582089729925) 189\n",
"20 POINT (-0.568504826151878 -0.7221964199245303) 189\n",
"21 POINT (-0.5606302203280751 -0.74635001850909) 189\n",
"22 POINT (-0.6992612691859065 -0.6454553573844989) 189\n",
"23 POINT (-0.6159593941226544 -0.7070961104629969) 189\n",
"... ... ...\n",
"11027 POINT (-0.4305385110916736 9.076234368239961) 389\n",
"11028 POINT (-0.4537681559524029 9.161142986905665) 389\n",
"11029 POINT (-0.2820377448943028 9.161271257397782) 389\n",
"11030 POINT (-0.3362987569862765 9.245027009306934) 389\n",
"11031 POINT (-0.4079040197712681 9.425093680088017) 389\n",
"11032 POINT (-0.4411635692407266 9.3666972585052) 389\n",
"11033 POINT (-0.5159205657547391 9.279545546905702) 389\n",
"11034 POINT (-0.3607472415548021 9.368373956946675) 389\n",
"11035 POINT (-0.296036553686887 9.268851166061744) 389\n",
"11036 POINT (-0.3965079435457004 9.410390412504745) 389\n",
"11037 POINT (-0.3715506573994599 9.2506129984639) 389\n",
"11038 POINT (-0.4893203439999804 9.312014173451992) 389\n",
"11039 POINT (-0.4091419101618364 9.296499068366757) 389\n",
"11040 POINT (-0.2396715681269344 9.365609617353719) 389\n",
"11041 POINT (-0.2052381913188682 9.372774637079004) 389\n",
"11042 POINT (-0.0725611128992317 9.322555803362294) 389\n",
"11043 POINT (-0.1071371662459003 9.382525296034267) 389\n",
"11044 POINT (-0.1902438357577092 9.408994076268105) 389\n",
"11045 POINT (-0.1521130755476637 9.536309382019757) 389\n",
"11046 POINT (-0.09021277761162953 9.623388679759447) 389\n",
"11047 POINT (0.04567327183286833 9.84502739087068) 390\n",
"11048 POINT (0.07352385919415433 9.871548063600704) 390\n",
"11049 POINT (-0.03412781031553851 9.73411378944385) 389\n",
"11050 POINT (0.05818398256509529 9.822144510541804) 390\n",
"11051 POINT (-0.01526728600292128 9.694190628712214) 389\n",
"11052 POINT (0.007312752895810504 9.798007971049278) 390\n",
"11053 POINT (0.0003221735375707304 9.773476537809671) 390\n",
"11054 POINT (-0.1529404673360687 9.778267263179336) 389\n",
"11055 POINT (0.01188548980026263 9.810784994069554) 390\n",
"11056 POINT (-0.02048703147162156 9.957768206221811) 389\n",
"\n",
"[11063 rows x 2 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sjoin(track, grid, how='left')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we aggregate these results to calculate the number of track points that intersected each cell."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"counts = sjoin(track, grid, how='inner').groupby('index_right').count()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll insert the counts as a column in our grid object, filling with zeros for cells that are not intersected."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"grid['counts'] = counts\n",
"grid['counts'].fillna(0, inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can show the grid as a heatmap colored by the number of track points that touch each cell."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nQigNACGUBoAQSgNACKUBIITSABDCGDnQ5RgjrzPfydm61g6Me2eH3knKlhdcrmxoMC27cKnyo0NJ\n2dKchTwu6siO5aM4PAEQQmkACKE0AIRQGgBCKA0AIZQGgBBKA0AIpQEghNIAEMIYOdDlGCOvM9/J\n2XrWzn69NSlb/tPrlO3flZZdvEx+ZiRtH6b2Kz/226RsafYf8bioIzuWj+LwBEAIpQEghNIAEEJp\nAAihNACEUBoAQigNACGUBoAQSgNACKUBIIRzT4Aux7kndeY7OVvX2mcTX8JgSp/8g9HEdXvb82vR\nodmxfBSHJwBCKA0AIZQGgBBKA0DIhErDzD5jZtvNLDOzGy/4u4fMbNDMdprZXRPbTQCtYqLPnvyX\npHslPV57o5ldLemzkq6WtEjSi2a21Jv9/C6ACZvQTxruvtvdByVd+DzvPZKecffz7r5X0qCkFRPZ\nFoDWUNTvNBZKerfm46HqbQDa3IcenpjZJkkDtTdJckkPu/vzRe0YgNb0oaXh7nfWse6QpMtqPl5U\nvW1ckam06ARbUWu3Wza89pS+wLq9xexDq3wtOjhbj8kcI6/9vcZzkp4ys8dUOSy5QtKvxvuk6Nw7\ngOaa6FOua8zsXUm3SPo3M3tBktx9h6QfS9oh6aeSvswzJ0BnaPpZrgDaS9MmQrtpMMzMHjGzA2b2\nZvXt7mbv00SZ2d1mtsvM9pjZV5u9P5PNzPaa2VYze8vMxj20bidm9oSZDZvZtprbZpnZRjPbbWYb\nzGxGylrNHCMfGwx7pfbGCwbDVkv6npl1wu89HnX3G6tvP2v2zkyEmZUkfVfSKknXSlprZsuau1eT\nLpe00t1vcPdOmDH6gSr3V62vSXrR3a+S9HNJD6Us1LTS6MLBsE4ovjErJA26+z53PyfpGVXut05i\n6qBzs9x9s6TjF9x8j6Qnq+8/KWlNylqt+EXp1MGwdWb2tpl9P/XHwBZ24X10QJ1xH9VySZvMbIuZ\nfanZO1OQ+e4+LEnufkjS/JRPKvTKXd00GPaH/q2SvifpH9zdzezrkh6V9MXG7yUCbnX3g2Y2T5Xy\n2Fn937qTJT0rUmhpNGIwrFUE/q3/KKndC3NI0uKaj9viPopw94PVPw+b2XpVDsk6rTSGzWzA3YfN\nbIGk91I+qVUOTy4cDLvPzC42sz/RHxgMaxfVO2TMpyRtb9a+TJItkq4wsyVmdrGk+1S53zqCmfWa\nWV/1/WmS7lL732dS5fvswu+1z1Xff0DSsymLNO3Cwma2RtJ3JM1VZTDsbXdf7e47zGxsMOycOmMw\n7Ntmdr0qv5HfK+nB5u7OxLh7ZmbrJG1U5T+eJ9x9Z5N3azINSFpfvVJ+j6Sn3H1jk/dpQszsR5JW\nSppjZvslPSLpm5L+2cy+IGmfKs9afvha7f/9CKCRWuXwBECboDQAhFAaAEIoDQAhlAaAEEoDQAil\nASCE0gAQ8r9TiPR46GOgCAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1302277d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = grid.plot(column='counts', cmap='Reds')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment