{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Point in Polygon & Intersect\n", "\n", "Finding out if a certain point is located inside or outside of an area,\n", "or finding out if a line intersects with another line or polygon are\n", "fundamental geospatial operations that are often used e.g. to select\n", "data based on location. Such spatial queries are one of the typical\n", "first steps of the workflow when doing spatial analysis. Performing a\n", "spatial join (will be introduced later) between two spatial datasets is\n", "one of the most typical applications where Point in Polygon (PIP) query\n", "is used. \n", "\n", "For further reading about PIP and other geometric operations, \n", "see Chapter 4.2 in Smith, Goodchild & Longley: [Geospatial Analysis - 6th edition](https://www.spatialanalysisonline.com/HTML/index.html).\n", "\n", "## How to check if point is inside a polygon?\n", "\n", "Computationally, detecting if a point is inside a polygon is most commonly done using a specific formula called [Ray Casting algorithm](https://en.wikipedia.org/wiki/Point_in_polygon#Ray_casting_algorithm).\n", "Luckily, we do not need to create such a function ourselves for\n", "conducting the Point in Polygon (PIP) query. Instead, we can take\n", "advantage of [Shapely's binary predicates](https://shapely.readthedocs.io/en/stable/manual.html#binary-predicates)\n", "that can evaluate the topolocical relationships between geographical\n", "objects, such as the PIP as we're interested here.\n", "\n", "There are basically two ways of conducting PIP in Shapely:\n", "\n", "1. using a function called\n", " [.within()](https://shapely.readthedocs.io/en/stable/manual.html#object.within)\n", " that checks if a point is within a polygon\n", "2. using a function called\n", " [.contains()](https://shapely.readthedocs.io/en/stable/manual.html#object.contains)\n", " that checks if a polygon contains a point\n", "\n", "Notice: even though we are talking here about **Point** in Polygon\n", "operation, it is also possible to check if a LineString or Polygon is\n", "inside another Polygon.\n", "\n", "- Let's import shapely functionalities and create some points:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from shapely.geometry import Point, Polygon\n", "\n", "# Create Point objects\n", "p1 = Point(24.952242, 60.1696017)\n", "p2 = Point(24.976567, 60.1612500)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Let's also create a polygon using a list of coordinate-tuples:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "# Create a Polygon\n", "coords = [(24.950899, 60.169158), (24.953492, 60.169158), (24.953510, 60.170104), (24.950958, 60.169990)]\n", "poly = Polygon(coords)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "POINT (24.952242 60.1696017)\n", "POINT (24.976567 60.16125)\n", "POLYGON ((24.950899 60.169158, 24.953492 60.169158, 24.95351 60.170104, 24.950958 60.16999, 24.950899 60.169158))\n" ] } ], "source": [ "# Let's check what we have\n", "print(p1)\n", "print(p2)\n", "print(poly)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "- Let's check if those points are ``within`` the polygon:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check if p1 is within the polygon using the within function\n", "p1.within(poly)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check if p2 is within the polygon\n", "p2.within(poly)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Okey, so we can see that the first point seems to be inside that polygon\n", "and the other one isn't.\n", "\n", "- In fact, the first point is quite close to close to the center of the polygon as we\n", " can see if we compare the point location to the polygon centroid:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "POINT (24.952242 60.1696017)\n", "POINT (24.95224242849236 60.16960179038188)\n" ] } ], "source": [ "# Our point\n", "print(p1)\n", "\n", "# The centroid\n", "print(poly.centroid)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "- It is also possible to do PIP other way around, i.e. to check if\n", " polygon contains a point:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Does polygon contain p1?\n", "poly.contains(p1)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Does polygon contain p2?\n", "poly.contains(p2)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Thus, both ways of checking the spatial relationship are identical; [contains()](https://shapely.readthedocs.io/en/stable/manual.html#object.contains) is inverse to [within()](https://shapely.readthedocs.io/en/stable/manual.html#object.within) and vice versa.\n", "\n", "Which one should you use then? Well, it depends:\n", "\n", "- if you have **many points and just one polygon** and you try to find out\n", " which one of them is inside the polygon: You might need to iterate over the points and check one at a time if it\n", " is **within()** the polygon.\n", "\n", "- if you have **many polygons and just one point** and you want to find out\n", " which polygon contains the point: You might need to iterate over the polygons until you find a polygon that **contains()** the point specified (assuming there are no overlapping polygons)\n", " \n", "## Intersect\n", "\n", "\n", "Another typical geospatial operation is to see if a geometry intersects\n", "or touches another one. Again, there are binary operations in Shapely for checking these spatial relationships:\n", "\n", "- [intersects():](https://shapely.readthedocs.io/en/stable/manual.html#object.intersects) Two objects intersect if the boundary or interior of one object intersect in any way with the boundary or interior of the other object.\n", "\n", "- [touches():](https://shapely.readthedocs.io/en/stable/manual.html#object.touches) Two objects touch if the objects have at least one point in common and their interiors do not intersect with any part of the other object.\n", " \n", "\n", "Let's try these out.\n", "\n", "- Let's create two LineStrings" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "from shapely.geometry import LineString, MultiLineString\n", "\n", "# Create two lines\n", "line_a = LineString([(0, 0), (1, 1)])\n", "line_b = LineString([(1, 1), (0, 2)])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "- Let's see if they intersect" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "line_a.intersects(line_b)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "- Do they also touch each other?" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "line_a.touches(line_b)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Indeed, they do and we can see this by plotting the features together" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/svg+xml": [ "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a MultiLineString from line_a and line_b\n", "multi_line = MultiLineString([line_a, line_b])\n", "multi_line" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Thus, the ``line_b`` continues from the same node ( (1,1) ) where ``line_a`` ends.\n", "\n", "However, if the lines overlap fully, they don't touch due to the spatial relationship rule, as we can see:\n", "\n", "- Check if `line_a` touches itself:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Does the line touch with itself?\n", "line_a.touches(line_a)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "- It does not. However, it does intersect:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Does the line intersect with itself?\n", "line_a.intersects(line_a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Point in Polygon using Geopandas\n", "\n", "Next we will do a practical example where we check which of the addresses from [the geocoding tutorial](geocoding_in_geopandas.ipynb) are located in Southern district of Helsinki. Let's start by reading a KML-file ``PKS_suuralue.kml`` that has the Polygons for districts of Helsinki Region (data openly available from [Helsinki Region Infoshare](http://www.hri.fi/fi/dataset/paakaupunkiseudun-aluejakokartat).\n", "\n", "- Let's start by reading the addresses from the Shapefile that we saved earlier." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
addressidaddrgeometry
0Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns...1000Itämerenkatu 14, 00101 Helsinki, FinlandPOINT (24.9155624 60.1632015)
1Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp...1001Kampinkuja 1, 00100 Helsinki, FinlandPOINT (24.9316914 60.1690222)
2Bangkok9, 8, Kaivokatu, Keskusta, Kluuvi, Etel...1002Kaivokatu 8, 00101 Helsinki, FinlandPOINT (24.9416849 60.1699637)
3Hermannin rantatie, Kyläsaari, Hermanni, Helsi...1003Hermannin rantatie 1, 00580 Helsinki, FinlandPOINT (24.9719335 60.1969965)
4Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län...1005Tyynenmerenkatu 9, 00220 Helsinki, FinlandPOINT (24.9216003 60.1566475)
\n", "
" ], "text/plain": [ " address id \\\n", "0 Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns... 1000 \n", "1 Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp... 1001 \n", "2 Bangkok9, 8, Kaivokatu, Keskusta, Kluuvi, Etel... 1002 \n", "3 Hermannin rantatie, Kyläsaari, Hermanni, Helsi... 1003 \n", "4 Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län... 1005 \n", "\n", " addr \\\n", "0 Itämerenkatu 14, 00101 Helsinki, Finland \n", "1 Kampinkuja 1, 00100 Helsinki, Finland \n", "2 Kaivokatu 8, 00101 Helsinki, Finland \n", "3 Hermannin rantatie 1, 00580 Helsinki, Finland \n", "4 Tyynenmerenkatu 9, 00220 Helsinki, Finland \n", "\n", " geometry \n", "0 POINT (24.9155624 60.1632015) \n", "1 POINT (24.9316914 60.1690222) \n", "2 POINT (24.9416849 60.1699637) \n", "3 POINT (24.9719335 60.1969965) \n", "4 POINT (24.9216003 60.1566475) " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "\n", "fp = \"data/addresses.shp\"\n", "data = gpd.read_file(fp)\n", "\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\n", "### Reading KML-files in Geopandas\n", "\n", "It is possible to read the data from KML-files with GeoPandas in a similar manner as Shapefiles. However, we need to first, enable the KML-driver which is not enabled by default (because KML-files can contain unsupported data structures, nested folders etc., hence be careful when reading KML-files). Supported drivers are managed with [`fiona.supported_drivers`](https://github.com/Toblerity/Fiona/blob/master/fiona/drvsupport.py), which is integrated in geopandas. Let's first check which formats are currently supported:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ARCGEN': 'r',\n", " 'AeronavFAA': 'r',\n", " 'BNA': 'raw',\n", " 'DGN': 'raw',\n", " 'DXF': 'raw',\n", " 'ESRI Shapefile': 'raw',\n", " 'GPKG': 'rw',\n", " 'GPSTrackMaker': 'raw',\n", " 'GPX': 'raw',\n", " 'GeoJSON': 'rw',\n", " 'Idrisi': 'r',\n", " 'MapInfo File': 'raw',\n", " 'OpenFileGDB': 'r',\n", " 'PCIDSK': 'r',\n", " 'SEGY': 'r',\n", " 'SUA': 'r'}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "gpd.io.file.fiona.drvsupport.supported_drivers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Let's enable the read and write functionalities for KML-driver by passing ``'rw'`` to whitelist of fiona's supported drivers:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "gpd.io.file.fiona.drvsupport.supported_drivers['KML'] = 'rw'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check again the supported drivers:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ARCGEN': 'r',\n", " 'AeronavFAA': 'r',\n", " 'BNA': 'raw',\n", " 'DGN': 'raw',\n", " 'DXF': 'raw',\n", " 'ESRI Shapefile': 'raw',\n", " 'GPKG': 'rw',\n", " 'GPSTrackMaker': 'raw',\n", " 'GPX': 'raw',\n", " 'GeoJSON': 'rw',\n", " 'Idrisi': 'r',\n", " 'KML': 'rw',\n", " 'MapInfo File': 'raw',\n", " 'OpenFileGDB': 'r',\n", " 'PCIDSK': 'r',\n", " 'SEGY': 'r',\n", " 'SUA': 'r'}" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gpd.io.file.fiona.drvsupport.supported_drivers" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now we should be able to read a KML file using the geopandas [read_file()](http://geopandas.org/reference/geopandas.read_file.html#geopandas.read_file) function.\n", "\n", "- Let's read district polygons from a KML -file that is located in the data-folder:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "# Filepath to KML file\n", "fp = \"data/PKS_suuralue.kml\"\n", "polys = gpd.read_file(fp, driver='KML')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of rows: 23\n" ] }, { "data": { "text/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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameDescriptiongeometry
0Suur-EspoonlahtiPOLYGON Z ((24.775059677807 60.1090604462157 0...
1Suur-KauklahtiPOLYGON Z ((24.6157775254076 60.1725681273527 ...
2Vanha-EspooPOLYGON Z ((24.6757633262026 60.2120070032819 ...
3Pohjois-EspooPOLYGON Z ((24.767921197401 60.2691954732391 0...
4Suur-MatinkyläPOLYGON Z ((24.7536131356802 60.1663051341717 ...
5KauniainenPOLYGON Z ((24.6907528033566 60.2195779731868 ...
6Suur-LeppävaaraPOLYGON Z ((24.797472695835 60.2082651196077 0...
7Suur-TapiolaPOLYGON Z ((24.8443596422129 60.1659790707387 ...
8MyyrmäkiPOLYGON Z ((24.8245867448802 60.2902531157585 ...
9KivistöPOLYGON Z ((24.9430919106369 60.3384471629062 ...
10EteläinenPOLYGON Z ((24.7827651307035 60.09997268858 0,...
\n", "
" ], "text/plain": [ " Name Description \\\n", "0 Suur-Espoonlahti \n", "1 Suur-Kauklahti \n", "2 Vanha-Espoo \n", "3 Pohjois-Espoo \n", "4 Suur-Matinkylä \n", "5 Kauniainen \n", "6 Suur-Leppävaara \n", "7 Suur-Tapiola \n", "8 Myyrmäki \n", "9 Kivistö \n", "10 Eteläinen \n", "\n", " geometry \n", "0 POLYGON Z ((24.775059677807 60.1090604462157 0... \n", "1 POLYGON Z ((24.6157775254076 60.1725681273527 ... \n", "2 POLYGON Z ((24.6757633262026 60.2120070032819 ... \n", "3 POLYGON Z ((24.767921197401 60.2691954732391 0... \n", "4 POLYGON Z ((24.7536131356802 60.1663051341717 ... \n", "5 POLYGON Z ((24.6907528033566 60.2195779731868 ... \n", "6 POLYGON Z ((24.797472695835 60.2082651196077 0... \n", "7 POLYGON Z ((24.8443596422129 60.1659790707387 ... \n", "8 POLYGON Z ((24.8245867448802 60.2902531157585 ... \n", "9 POLYGON Z ((24.9430919106369 60.3384471629062 ... \n", "10 POLYGON Z ((24.7827651307035 60.09997268858 0,... " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Check the data\n", "print(\"Number of rows:\",len(polys))\n", "polys.head(11)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nice, now we can see that we have 23 districts in our area. \n", "- Let's quickly plot the geometries to see how the layer looks like: " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "polys.plot()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We are interested in an area that is called ``Eteläinen`` (*'Southern'* in English).\n", "\n", "- Let's select the ``Eteläinen`` district and see where it is located on a map:\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Select data \n", "southern = polys.loc[polys['Name']=='Eteläinen']" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# Reset index for the selection\n", "southern.reset_index(drop=True, inplace=True)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameDescriptiongeometry
0EteläinenPOLYGON Z ((24.7827651307035 60.09997268858 0,...
\n", "
" ], "text/plain": [ " Name Description geometry\n", "0 Eteläinen POLYGON Z ((24.7827651307035 60.09997268858 0,..." ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the selction\n", "southern.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Let's create a map which shows the location of the selected district, and let's also plot the geocoded address points on top of the map:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Create a figure with one subplot\n", "fig, ax = plt.subplots()\n", "\n", "# Plot polygons\n", "polys.plot(ax=ax, facecolor='gray')\n", "southern.plot(ax=ax, facecolor='red')\n", "\n", "# Plot points\n", "data.plot(ax=ax, color='blue', markersize=5)\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Okey, so we can see that, indeed, certain points are within the selected red Polygon.\n", "\n", "Let's find out which one of them are located within the Polygon. Hence, we are conducting a **Point in Polygon query**.\n", "\n", "- First, let's check that we have `shapely.speedups` enabled. This module makes some of the spatial queries running faster (starting from Shapely version 1.6.0 Shapely speedups are enabled by default):" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#import shapely.speedups\n", "from shapely import speedups\n", "speedups.enabled\n", "\n", "# If false, run this line:\n", "#shapely.speedups.enable()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "- Let's check which Points are within the ``southern`` Polygon. Notice, that here we check if the Points are ``within`` the **geometry**\n", " of the ``southern`` GeoDataFrame. \n", "- We use the ``.at[0, 'geometry']`` to parse the actual Polygon geometry object from the GeoDataFrame." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 True\n", "1 True\n", "2 True\n", "3 False\n", "4 True\n", "5 False\n", "6 False\n", "7 False\n", "8 False\n", "9 False\n", "10 True\n", "11 False\n", "12 False\n", "13 False\n", "14 False\n", "15 False\n", "16 False\n", "17 False\n", "18 False\n", "19 False\n", "20 False\n", "21 False\n", "22 False\n", "23 False\n", "24 False\n", "25 False\n", "26 False\n", "27 False\n", "28 False\n", "29 False\n", "30 True\n", "31 True\n", "32 True\n", "33 True\n", "dtype: bool\n" ] } ], "source": [ "pip_mask = data.within(southern.at[0, 'geometry'])\n", "print(pip_mask)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "As we can see, we now have an array of boolean values for each row, where the result is ``True``\n", "if Point was inside the Polygon, and ``False`` if it was not.\n", "\n", "- We can now use this mask array to select the Points that are inside the Polygon. Selecting data with this kind of mask array (of boolean values) is\n", " easy by passing the array inside the ``loc`` indexer:\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", " \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", " \n", " \n", " \n", " \n", " \n", "
addressidaddrgeometry
0Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns...1000Itämerenkatu 14, 00101 Helsinki, FinlandPOINT (24.9155624 60.1632015)
1Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp...1001Kampinkuja 1, 00100 Helsinki, FinlandPOINT (24.9316914 60.1690222)
2Bangkok9, 8, Kaivokatu, Keskusta, Kluuvi, Etel...1002Kaivokatu 8, 00101 Helsinki, FinlandPOINT (24.9416849 60.1699637)
4Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län...1005Tyynenmerenkatu 9, 00220 Helsinki, FinlandPOINT (24.9216003 60.1566475)
10The Pullman Bar, 1, Rautatientori, Keskusta, K...1011Rautatientori 1, 00100 Helsinki, FinlandPOINT (24.9422931 60.1711382)
30Kampin keskus, 1, Urho Kekkosen katu, Kamppi, ...1031Urho Kekkosen katu 1, 00100 Helsinki, FinlandPOINT (24.9331155798105 60.1690911)
31Ruoholahdenkatu, Hietalahti, Kamppi, Eteläinen...1032Ruoholahdenkatu 17, 00101 Helsinki, FinlandPOINT (24.9252037 60.1648863)
323, Tyynenmerenkatu, Jätkäsaari, Länsisatama, E...1033Tyynenmerenkatu 3, 00220 Helsinki, FinlandPOINT (24.9212065 60.1587845)
33Oluthuone Kaisla, 4, Vilhonkatu, Keskusta, Klu...1034Vilhonkatu 4, 00101 Helsinki, FinlandPOINT (24.9470863 60.1719054)
\n", "
" ], "text/plain": [ " address id \\\n", "0 Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns... 1000 \n", "1 Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp... 1001 \n", "2 Bangkok9, 8, Kaivokatu, Keskusta, Kluuvi, Etel... 1002 \n", "4 Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län... 1005 \n", "10 The Pullman Bar, 1, Rautatientori, Keskusta, K... 1011 \n", "30 Kampin keskus, 1, Urho Kekkosen katu, Kamppi, ... 1031 \n", "31 Ruoholahdenkatu, Hietalahti, Kamppi, Eteläinen... 1032 \n", "32 3, Tyynenmerenkatu, Jätkäsaari, Länsisatama, E... 1033 \n", "33 Oluthuone Kaisla, 4, Vilhonkatu, Keskusta, Klu... 1034 \n", "\n", " addr \\\n", "0 Itämerenkatu 14, 00101 Helsinki, Finland \n", "1 Kampinkuja 1, 00100 Helsinki, Finland \n", "2 Kaivokatu 8, 00101 Helsinki, Finland \n", "4 Tyynenmerenkatu 9, 00220 Helsinki, Finland \n", "10 Rautatientori 1, 00100 Helsinki, Finland \n", "30 Urho Kekkosen katu 1, 00100 Helsinki, Finland \n", "31 Ruoholahdenkatu 17, 00101 Helsinki, Finland \n", "32 Tyynenmerenkatu 3, 00220 Helsinki, Finland \n", "33 Vilhonkatu 4, 00101 Helsinki, Finland \n", "\n", " geometry \n", "0 POINT (24.9155624 60.1632015) \n", "1 POINT (24.9316914 60.1690222) \n", "2 POINT (24.9416849 60.1699637) \n", "4 POINT (24.9216003 60.1566475) \n", "10 POINT (24.9422931 60.1711382) \n", "30 POINT (24.9331155798105 60.1690911) \n", "31 POINT (24.9252037 60.1648863) \n", "32 POINT (24.9212065 60.1587845) \n", "33 POINT (24.9470863 60.1719054) " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pip_data = data.loc[pip_mask]\n", "pip_data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's finally confirm that our Point in Polygon query worked as it should by plotting the points that are within the southern district:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create a figure with one subplot\n", "fig, ax = plt.subplots()\n", "\n", "# Plot polygons\n", "polys.plot(ax=ax, facecolor='gray')\n", "southern.plot(ax=ax, facecolor='red')\n", "\n", "# Plot points\n", "pip_data.plot(ax=ax, color='gold', markersize=2)\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Perfect! Now we only have the (golden) points that, indeed, are inside the red Polygon which is exactly what we wanted!" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.6" } }, "nbformat": 4, "nbformat_minor": 4 }