Skip to content

Instantly share code, notes, and snippets.

@dfolch
Created November 4, 2017 20:14
Show Gist options
  • Select an option

  • Save dfolch/e2f946f9fee25fa4a5bfe621028db933 to your computer and use it in GitHub Desktop.

Select an option

Save dfolch/e2f946f9fee25fa4a5bfe621028db933 to your computer and use it in GitHub Desktop.
Geopandas intersection issue 1
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.3.0\n"
]
}
],
"source": [
"%matplotlib inline\n",
"import geopandas as gpd\n",
"from shapely.geometry import Polygon, LineString\n",
"print gpd.__version__"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"polys = gpd.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)]),\n",
" Polygon([(2,2), (4,2), (4,4), (2,4)])])\n",
"\n",
"lines = gpd.GeoSeries([LineString([(1,3), (3,3)]),\n",
" LineString([(1,1), (1,2.5)])])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1176c06d0>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n/x74DWcA/cb3AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1176c0850>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = polys.plot(color='red')\n",
"lines.plot(ax=ax, color='blue')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"shapely.geometry.polygon.Polygon"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"square = polys.geometry[0]\n",
"type(square)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No handlers could be found for logger \"shapely.geos\"\n"
]
},
{
"ename": "TopologicalError",
"evalue": "This operation could not be performed. Reason: unknown",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTopologicalError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-5-2db09317547b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlines\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintersection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msquare\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/dfolch/anaconda2/lib/python2.7/site-packages/geopandas/base.pyc\u001b[0m in \u001b[0;36mintersection\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 263\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mintersection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;34m\"\"\"Return the set-theoretic intersection of each geometry with *other*\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 265\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_geo_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'intersection'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 266\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[0;31m#\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/dfolch/anaconda2/lib/python2.7/site-packages/geopandas/base.pyc\u001b[0m in \u001b[0;36m_geo_op\u001b[0;34m(this, other, op)\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m return gpd.GeoSeries([getattr(s, op)(other)\n\u001b[0;32m---> 36\u001b[0;31m for s in this.geometry],\n\u001b[0m\u001b[1;32m 37\u001b[0m index=this.index, crs=this.crs)\n\u001b[1;32m 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/dfolch/anaconda2/lib/python2.7/site-packages/shapely/geometry/base.pyc\u001b[0m in \u001b[0;36mintersection\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 618\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mintersection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[0;34m\"\"\"Returns the intersection of the geometries\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 620\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgeom_factory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimpl\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'intersection'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\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 621\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 622\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msymmetric_difference\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/dfolch/anaconda2/lib/python2.7/site-packages/shapely/topology.pyc\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, this, other, *args)\u001b[0m\n\u001b[1;32m 68\u001b[0m err = TopologicalError(\n\u001b[1;32m 69\u001b[0m \"This operation could not be performed. Reason: unknown\")\n\u001b[0;32m---> 70\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_topology\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 71\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mproduct\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/dfolch/anaconda2/lib/python2.7/site-packages/shapely/topology.pyc\u001b[0m in \u001b[0;36m_check_topology\u001b[0;34m(self, err, *geoms)\u001b[0m\n\u001b[1;32m 37\u001b[0m \"Likely cause is invalidity of the geometry %s\" % (\n\u001b[1;32m 38\u001b[0m self.fn.__name__, repr(geom)))\n\u001b[0;32m---> 39\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 40\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTopologicalError\u001b[0m: This operation could not be performed. Reason: unknown"
]
}
],
"source": [
"lines.intersection(square)"
]
}
],
"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.14"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment