Skip to content

Instantly share code, notes, and snippets.

@kissmygritts
Created January 3, 2023 21:30
Show Gist options
  • Save kissmygritts/4b1bc3c1ab2d1b6721d9d026130107bb to your computer and use it in GitHub Desktop.
Save kissmygritts/4b1bc3c1ab2d1b6721d9d026130107bb to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "8af5bf41-0f19-4ff4-a8f5-ce957fbe03d7",
"metadata": {},
"source": [
"# Geometric Relationships\n",
"\n",
"https://shapely.readthedocs.io/en/stable/predicates.html#predicates\n",
"\n",
"Sometimes the predicates used for spatial relationships don't seem to line up with what they should mean. Here is a short guide showing different geometric relationships and the results of all the shapely predicates. \n",
"\n",
"*Note: not all predicates are available in geopandas*"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "0996699b-61f3-46cd-a792-6287f1e4b7b3",
"metadata": {},
"outputs": [],
"source": [
"import geopandas as gpd\n",
"from shapely.geometry import Polygon, LineString, MultiLineString, MultiPolygon, MultiPoint, Point\n",
"import shapely.ops as ops\n",
"import shapely\n",
"import numpy as np\n",
"\n",
"\n",
"def plot_colors(n):\n",
" from math import ceil\n",
" colors = [\"#5F4690\",\"#38A6A5\",\"#0F8554\",\"#73AF48\",\"#EDAD08\",\"#E17C05\",\"#CC503E\",\"#94346E\",\"#6F4070\",\"#994E95\",\"#666666\",\"#1D6996\",]\n",
" \n",
" r = ceil(n/len(colors))\n",
"\n",
" for i in range(r):\n",
" colors.extend(colors)\n",
" \n",
" return colors[0:n]"
]
},
{
"cell_type": "markdown",
"id": "8e8da865-4d2e-4efc-ad10-b50e2a32d706",
"metadata": {
"tags": []
},
"source": [
"## Point in Polygon relationships"
]
},
{
"cell_type": "markdown",
"id": "1fa5c500-0a44-4b42-b5c0-01b6a01f6b45",
"metadata": {},
"source": [
"### Point in Polygon"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7eb64674-71c2-4a86-9081-f8a391991fbd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"point contains polygon: False\n",
"point covers polygon: False\n",
"point covered_by polygon: True\n",
"point crosses polygon: False\n",
"point disjoint polygon: False\n",
"point intersects polygon: True\n",
"point overlaps polygon: False\n",
"point touches polygon: False\n",
"point within polygon: True\n",
"DE-9IM: 0FFFFF212\n",
"---\n",
"polygon contains point: True\n",
"polygon covers point: True\n",
"polygon covered_by point: False\n",
"polygon crosses point: False\n",
"polygon disjoint point: False\n",
"polygon intersects point: True\n",
"polygon overlaps point: False\n",
"polygon touches point: False\n",
"polygon within point: False\n",
"DE-9IM: 0F2FF1FF2\n"
]
},
{
"data": {
"image/png": "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rTFr1iydPXtW+fn5CgQCSktLU1lZ2WU3bAAA4LAsy+rsJq5XKBSSy+VSMBhUQkJCq9fJWLumDbsCgJ6jMvuB65pv53Wc7yoEABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABjFdnBt375dM2bMkNfrlcPhUGlp6RXr33rrLd17770aPHiwEhISlJGRoS1btkTVPP3003I4HFHbqFGj7LYGAOgBbAdXOBxWamqqioqKrql++/btuvfee7V582bt27dPU6ZM0YwZM3TgwIGoutGjR6umpiay7dixw25rAIAeoJfdCZmZmcrMzLzm+uXLl0c9/td//Ve98847+u///m+NGzfu+0Z69ZLH47HbDgCgh+nw97iampp08eJFDRw4MGr8yJEj8nq9GjZsmH72s5/pxIkTLa5RX1+vUCgUtQEAeoYOD64XX3xRdXV1uv/++yNj6enpKikpUVlZmV599VVVV1frnnvu0cWLF5tdo7CwUC6XK7IlJyd3VPsAgE7WocG1Zs0aPfPMM9qwYYMSExMj45mZmbrvvvs0duxY+f1+bd68WRcuXNCGDRuaXScvL0/BYDCynTx5sqMOAQDQyWy/x9Va69at0/z587Vx40b5fL4r1vbv31+33nqrjh492ux+p9Mpp9PZHm0CALq4DrniWrt2rXJycrR27VpNnz79qvV1dXU6duyYkpKSOqA7AIBJbF9x1dXVRV0JVVdXq6qqSgMHDtTNN9+svLw8ff7551q9erWk7349OHfuXL388stKT09XIBCQJPXp00cul0uS9Pjjj2vGjBkaMmSITp8+rYKCAsXGxio7O7stjhEA0I3YvuLau3evxo0bF7mVPTc3V+PGjVN+fr4kqaamJuqOwNdee03ffvutFi1apKSkpMj26KOPRmpOnTql7OxsjRw5Uvfff79++MMfateuXRo8ePD1Hh8AoJtxWJZldXYT1ysUCsnlcikYDCohIaHV62SsXdOGXQFAz1GZ/cB1zbfzOs53FQIAjEJwAQCMQnABAIxCcAEAjEJw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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"point = Point(1, 1)\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" point, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # point\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"print(\"point contains polygon: \", g0.contains(g1))\n",
"print(\"point covers polygon: \", g0.covers(g1))\n",
"print(\"point covered_by polygon: \", g0.covered_by(g1))\n",
"print(\"point crosses polygon: \", g0.crosses(g1))\n",
"print(\"point disjoint polygon: \", g0.disjoint(g1))\n",
"print(\"point intersects polygon: \", g0.intersects(g1))\n",
"print(\"point overlaps polygon: \", g0.overlaps(g1))\n",
"print(\"point touches polygon: \", g0.touches(g1))\n",
"print(\"point within polygon: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"print(\"---\")\n",
"print(\"polygon contains point: \", g1.contains(g0))\n",
"print(\"polygon covers point: \", g1.covers(g0))\n",
"print(\"polygon covered_by point: \", g1.covered_by(g0))\n",
"print(\"polygon crosses point: \", g1.crosses(g0))\n",
"print(\"polygon disjoint point: \", g1.disjoint(g0))\n",
"print(\"polygon intersects point: \", g1.intersects(g0))\n",
"print(\"polygon overlaps point: \", g1.overlaps(g0))\n",
"print(\"polygon touches point: \", g1.touches(g0))\n",
"print(\"polygon within point: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "0be01e35-6a26-4403-9500-41579f23088d",
"metadata": {},
"source": [
"### Point touches Polygon"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "dd249b45-0522-4939-b6a5-ced22639d682",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"contains: False\n",
"covers: False\n",
"covered_by: True\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: F0FFFF212\n",
"---\n",
"contains: False\n",
"covers: True\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF20F1FF2\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAGdCAYAAABKG5eZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmWUlEQVR4nO3dfXBUZZr+8asTTAcc0pCBdCcaIQjCipAwKDGMLlDT0mQpimzVKsRZwRTgLotTMq0yZEoTXa2Nug6ia9aMCgRmltdCY62yUSYaKCRA8ZIacRgKmCgg6fCy0k1aTZzk/P7wR7stCXBC3p7k+6k6NfbT9/PkPqd6+uLknO44LMuyBACAIWK6ugEAAOwguAAARiG4AABGIbgAAEYhuAAARiG4AABGIbgAAEYhuAAARunT1Q20h+bmZp06dUr9+/eXw+Ho6nYAADZZlqULFy4oJSVFMTGXP6fqEcF16tQppaamdnUbAIBrdOLECd14442XrekRwdW/f39J3+1wQkJCF3cDALArFAopNTU18n5+OT0iuC7+ejAhIYHgAgCDXc3lHm7OAAAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABilR3wAGejJmpuadfjgKQX/NyxX4vUaeVuKYmL5Nyd6L1uv/qKiIt1xxx3q37+/kpKSlJOTo8OHD19x3qZNmzRq1CjFx8drzJgx2rJlS9TzlmWpoKBAycnJ6tu3r7xer44cOWJvT4AeaO+Oo3p0zio9v2SzSp4r1/NLNuvROau0d8fRrm4N6DK2gmvbtm1atGiRdu3apa1bt+rbb7/V1KlTFQ6HW52zc+dO5ebmat68eTpw4IBycnKUk5OjgwcPRmpeeOEFvfLKKyopKdHu3bt1/fXXy+fz6Ztvvmn7ngGG27vjqF595j19ebY+avzLs/V69Zn3CC/0Wg7Lsqy2Tj5z5oySkpK0bds2/e3f/m2LNbNmzVI4HNa7774bGbvzzjuVkZGhkpISWZallJQUPfroo3rsscckScFgUG63W6WlpZo9e/YV+wiFQnK5XAoGg3xXIXqE5qZmPTpn1SWh9X8lDv6RXlydx68N0SPYeR+/pld8MBiUJCUmJrZaU1VVJa/XGzXm8/lUVVUlSaqpqVEgEIiqcblcyszMjNT8UENDg0KhUNQG9CSHD566bGhJ0v+eqdfhg6c6qSOg+2jzzRnNzc1avHixfvrTn+q2225rtS4QCMjtdkeNud1uBQKByPMXx1qr+aGioiI9/fTTbW29VVnr1rb7mkBb9P/LN0q5irpH3v1AF/4U3+H9AFdSlXt/p/2sNp9xLVq0SAcPHtT69evbs5+rkp+fr2AwGNlOnDjR6T0AHemvfa/u/5pXWwf0JG161T/88MN699139dFHH13xL1V6PB7V1dVFjdXV1cnj8USevzjWWs0POZ3OyN/e4m9woSf62n2dvu0Xo9YuQFuSvu0Xo6/d13VmW0C3YCu4LMvSww8/rLffflsffvih0tLSrjgnKytLFRUVUWNbt25VVlaWJCktLU0ejyeqJhQKaffu3ZEaoNeJceh05o8k6ZLwuvj4dOaPpJgr/9E9oKexdY1r0aJFWrt2rd555x31798/cg3K5XKpb9++kqQ5c+bohhtuUFFRkSTpkUce0aRJk/Sb3/xG06dP1/r167V37169/vrrkr77a5eLFy/Ws88+qxEjRigtLU1PPvmkUlJSlJOT0467CpilfohTp6YkKGl3va77qjky/td+MTqd+SPVD3F2YXdA17EVXK+99pokafLkyVHjq1at0oMPPihJOn78uGJivj+RmzhxotauXasnnnhCv/71rzVixAiVlZVF3dCxZMkShcNhPfTQQzp//rzuuusulZeXKz6ei87o3eqHOFWfGqe+dd+qz9fN+mvf///rQc600Itd0+e4uov2+hwXdxUCQNtc612FnfY5LgAAOhvBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMIrt4Nq+fbtmzJihlJQUORwOlZWVXbb+wQcflMPhuGQbPXp0pOapp5665PlRo0bZ3hkAQM9nO7jC4bDS09NVXFx8VfUvv/yyamtrI9uJEyeUmJioe++9N6pu9OjRUXU7duyw2xoAoBfoY3dCdna2srOzr7re5XLJ5XJFHpeVlenLL79UXl5edCN9+sjj8dhtBwDQy3T6Na4VK1bI6/VqyJAhUeNHjhxRSkqKhg0bpp//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fW/SluMpSfX19RoyZIhSU1M1c+ZMffrpp53Rbo/E67NjZGRkKDk5Wffcc48+/vjjrm6nWwoGg5KkxMTEVms6+vXZK4Lr7Nmzampqktvtjhp3u92t/g47EAjYqu9N2nI8R44cqZUrV+qdd97R73//ezU3N2vixIk6efJkZ7Tc47T2+gyFQvr666+7qCtzJScnq6SkRJs3b9bmzZuVmpqqyZMna//+/V3dWrfS3NysxYsX66c//aluu+22Vus6+v2zR3w7PLq/rKwsZWVlRR5PnDhRf/M3f6Pf/va3euaZZ7qwM+C7f1iNHDky8njixIk6duyYXnrpJf3ud7/rws66l0WLFungwYPasWNHl/bRK864Bg0apNjYWNXV1UWN19XVyePxtDjH4/HYqu9N2nI8f+i6667TuHHjdPTo0Y5oscdr7fWZkJCgvn37dlFXPcuECRN4ff4fDz/8sN5991199NFHV/wzUh39/tkrgisuLk7jx49XRUVFZKy5uVkVFRVRZwH/V1ZWVlS9JG3durXV+t6kLcfzh5qamvTJJ58oOTm5o9rs0Xh9drzq6mpen/ruDzw+/PDDevvtt/Xhhx8qLS3tinM6/PXZLrd4GGD9+vWW0+m0SktLrT/96U/WQw89ZA0YMMAKBAKWZVnWAw88YC1dujRS//HHH1t9+vSxXnzxRevQoUNWYWGhdd1111mffPJJV+1Ct2L3eD799NPW+++/bx07dszat2+fNXv2bCs+Pt769NNPu2oXupULFy5YBw4csA4cOGBJspYtW2YdOHDA+vzzzy3LsqylS5daDzzwQKT+L3/5i9WvXz/r8ccftw4dOmQVFxdbsbGxVnl5eVftQrdi93i+9NJLVllZmXXkyBHrk08+sR555BErJibG+sMf/tBVu9BtLFy40HK5XFZlZaVVW1sb2b766qtITWe/f/aa4LIsy/qP//gP66abbrLi4uKsCRMmWLt27Yo8N2nSJGvu3LlR9Rs3brRuueUWKy4uzho9erT13nvvdXLH3Zud47l48eJIrdvttv7u7/7O2r9/fxd03T1dvB37h9vFYzh37lxr0qRJl8zJyMiw4uLirGHDhlmrVq3q9L67K7vH8/nnn7duvvlmKz4+3kpMTLQmT55sffjhh13TfDfT0nGUFPV66+z3T/6sCQDAKL3iGhcAoOcguAAARiG4AABGIbgAAEYhuAAARiG4AABGIbgAAEYhuAAARiG4AABGIbgAAEYhuAAARiG4AABG+X+BAk3HkLDdggAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# point intersects edge of polygon\n",
"point = Point(1, 2)\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" point, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # point\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"print(\"---\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "df87be4a-5908-4c4e-9668-d591533d689c",
"metadata": {},
"source": [
"### Point outside Polygon\n",
"\n",
"this will be the same for every \"geometry outside geometry\" relationship. Essentially, they are all `disjoint`. *Note: the exception is the DE-9IM relates matrix*"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "56f3bdd7-2e62-492c-901a-dd230cb37300",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"point x polygon ---\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: True\n",
"intersects: False\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: FF0FFF212\n",
"polygon x point ---\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: True\n",
"intersects: False\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: FF2FF10F2\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# point outside edge of polygon\n",
"point = Point(3, 1)\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" point, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # point\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"point x polygon ---\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"polygon x point ---\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "fb42a1a1-e7a8-44d8-a761-0d884976d8cc",
"metadata": {},
"source": [
"## Line x Polygon relationships"
]
},
{
"cell_type": "markdown",
"id": "7b1541f7-ddf5-4bb4-8804-a217b0487bb3",
"metadata": {},
"source": [
"### Line spans polygon"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "35b021b6-0ce9-4b56-bfe7-5d668edb7b7a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon x line --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: True\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 101FF0212\n",
"-- line x polygon --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: True\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 1F20F1102\n"
]
},
{
"data": {
"image/png": "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t5v333/fzJ4924wdO9Z89913Nlpo1y9+8QszefJkU1VVZd566y1z2WWXmaKiovDzn332mcnIyDBVVVXGGGMOHz5sHnzwQbN//37T0NBgtm/fbsaNG2euvfZaWy1E2LRpk3G73aasrMx88MEH5q677jLDhg0zfr/fGGPMbbfdZpYuXRoe//bbb5uBAweaxx57zHz44YdmxYoVZtCgQebgwYO2WmiX0/5WrlxpXnvtNfPJJ5+Y6upqc/PNN5ukpCRz6NAhWy206+TJk+FzTJJ5/PHHTU1NjTly5IgxxpilS5ea2267LTz+008/NUOGDDH33Xef+fDDD83q1avNgAEDzM6dO2210CGnPT7xxBNm27Zt5uOPPzYHDx40ixcvNgkJCeaNN96w1UK77rnnHuPxeMzu3btNY2NjePn222/DY+L5PIylv3g6D5cuXWr27NljGhoazPvvv2+WLl1qXC6Xef31140xvefY9bswUlxcbCSds7z55pvhMZLM008/HX4cCoXMH//4R5OSkmLcbreZMWOGqa+v7/niO+Hf//63KSoqMhdccIFJTk428+fPjwhaDQ0NEf0ePXrUXHvttWb48OHG7Xab8ePHm/vuu88EAgFLHZzrb3/7mxk9erRJTEw006dPN++88074udzcXFNcXBwx/vnnnzc//elPTWJiorniiivMyy+/3MMVO+OkvyVLloTHpqSkmF/+8pfmwIEDFqrunLN/xvrj5WxPxcXFJjc395w5WVlZJjEx0YwbNy7iXOyNnPb48MMPm0svvdQkJSWZ4cOHm7y8PLNr1y47xXdCW739+HdkPJ+HsfQXT+fh7bffbsaMGWMSExPNRRddZGbMmBEOIsb0nmPnMsaY7r32AgAAEF2fuGcEAADEL8IIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArPp/fRit8fXu3oUAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"line = LineString([(-1, 1), (3, 1)])\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" line, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # line\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon x line --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- line x polygon --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "f59c3dbc-54e9-46b5-91ae-8c05b8cf91f9",
"metadata": {},
"source": [
"### Line ends in polygon\n",
"\n",
"This is an example of a relationship we needed to solve for intersecting line geometries with polygon geometries. We only wanted to intersect lines that fully crossed a polygon (see above) and exclude these types of intersections. The previous example and this example have the same results for all the predicates. However, the DE-9IM matrix are different. To resolve these two types of relationships we need to use `shapely.relate` and parse the matrix."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "2fe6a6a6-45d8-4f9d-9ccf-615c62f05849",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon x line --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: True\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 1010F0212\n",
"-- line x polygon --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: True\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 1020F1102\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAF2CAYAAABNisPlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAnoUlEQVR4nO3dfXBUZZr+8asTTAdc0sBA0olECIJhQUgYlBhGF1hbmixFkd1ahTgrMQu4w+KUTHwZYmkiq7VR10FwJ0NGBYMzw+sisVaZKBMNFBKgCKQEF/kBEwUkHV5Kukk7Jm5yfn9YtNuSQDqQ9EPn+6k6pf2c+zy5z1Nt5/L06Y7NsixLAAAABosKdwMAAABXQmABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABivV7gbuBZaW1t16tQp9e3bVzabLdztAACADrAsSxcuXFBSUpKioi5/DSUiAsupU6eUnJwc7jYAAEAnnDhxQoMHD75sTUQElr59+0r67oTj4uLC3A0AAOgIn8+n5OTkwO/xy4mIwHLxbaC4uDgCCwAA15mO3M7BTbcAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPFCCizFxcW644471LdvX8XHxys7O1uHDx++4nEbN27UyJEjFRsbqzFjxmjLli1B+y3LUmFhoRITE9W7d2+5XC4dOXIktDMBAAARK6TAsm3bNi1cuFC7du3S1q1b9e2332rq1Kny+/3tHrNz507l5ORo7ty52r9/v7Kzs5Wdna2DBw8Gal566SW9+uqrKi0t1e7du3XjjTfK7Xbrm2++6fyZAQCAiGGzLMvq7MFnzpxRfHy8tm3bpr/5m79ps2bWrFny+/169913A2N33nmn0tPTVVpaKsuylJSUpMcee0yPP/64JMnr9SohIUFlZWWaPXv2Ffvw+XxyOBzyer18NT8AANeJUH5/X9U9LF6vV5I0YMCAdmuqq6vlcrmCxtxut6qrqyVJdXV18ng8QTUOh0MZGRmBmh9qamqSz+cL2gAAQOTq9B8/bG1t1aJFi/STn/xEt912W7t1Ho9HCQkJQWMJCQnyeDyB/RfH2qv5oeLiYi1ZsqSzrYcsc+2abvtZAHC1qnMeCHcLwDXX6SssCxcu1MGDB7Vu3bpr2U+HFBQUyOv1BrYTJ050ew8AAKD7dOoKyyOPPKJ3331X27dv1+DBgy9b63Q61dDQEDTW0NAgp9MZ2H9xLDExMagmPT29zTntdrvsdntnWgcAANehkK6wWJalRx55RJs3b9aHH36olJSUKx6TmZmpysrKoLGtW7cqMzNTkpSSkiKn0xlU4/P5tHv37kANAADo2UK6wrJw4UKtWbNG77zzjvr27Ru4x8ThcKh3796SpDlz5uimm25ScXGxJOnRRx/VpEmT9Ktf/UrTp0/XunXrtHfvXr322muSJJvNpkWLFun555/XiBEjlJKSomeeeUZJSUnKzs6+hqcKAACuVyEFlhUrVkiSJk+eHDT+5ptv6qGHHpIkHT9+XFFR31+4mThxotasWaOnn35aTz31lEaMGKHy8vKgG3WffPJJ+f1+Pfzwwzp//rzuuusuVVRUKDY2tpOnBQAAIslVfQ+LKbr6e1j4lBCA6wmfEsL1otu+hwUAAKA7EFgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxQg4s27dv14wZM5SUlCSbzaby8vLL1j/00EOy2WyXbKNHjw7UPPvss5fsHzlyZMgnAwAAIlPIgcXv9ystLU0lJSUdql++fLnq6+sD24kTJzRgwADdd999QXWjR48OqtuxY0eorQEAgAjVK9QDsrKylJWV1eF6h8Mhh8MReFxeXq6vvvpKeXl5wY306iWn0xlqOwAAoAfo9ntYVq5cKZfLpSFDhgSNHzlyRElJSRo2bJh++tOf6vjx4+3O0dTUJJ/PF7QBAIDI1a2B5dSpU/rjH/+oefPmBY1nZGSorKxMFRUVWrFiherq6nT33XfrwoULbc5TXFwcuHLjcDiUnJzcHe0DAIAw6dbAsnr1avXr10/Z2dlB41lZWbrvvvs0duxYud1ubdmyRefPn9eGDRvanKegoEBerzewnThxohu6BwAA4RLyPSydZVmWVq1apQcffFAxMTGXre3Xr59uvfVWHT16tM39drtddru9K9oEAAAG6rYrLNu2bdPRo0c1d+7cK9Y2Njbq2LFjSkxM7IbOAACA6UIOLI2NjaqtrVVtba0kqa6uTrW1tYGbZAsKCjRnzpxLjlu5cqUyMjJ02223XbLv8ccf17Zt2/T5559r586d+vu//3tFR0crJycn1PYAAEAECvktob1792rKlCmBx/n5+ZKk3NxclZWVqb6+/pJP+Hi9Xm3atEnLly9vc86TJ08qJydH586d06BBg3TXXXdp165dGjRoUKjtAQCACBRyYJk8ebIsy2p3f1lZ2SVjDodDX3/9dbvHrFu3LtQ2AABAD8LfEgIAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPFCDizbt2/XjBkzlJSUJJvNpvLy8svWV1VVyWazXbJ5PJ6gupKSEg0dOlSxsbHKyMjQnj17Qm0NAABEqJADi9/vV1pamkpKSkI67vDhw6qvrw9s8fHxgX3r169Xfn6+ioqKtG/fPqWlpcntduv06dOhtgcAACJQr1APyMrKUlZWVsg/KD4+Xv369Wtz39KlSzV//nzl5eVJkkpLS/Xee+9p1apVWrx4ccg/CwAARJZuu4clPT1diYmJuvfee/Xxxx8Hxpubm1VTUyOXy/V9U1FRcrlcqq6ubnOupqYm+Xy+oA0AAESuLg8siYmJKi0t1aZNm7Rp0yYlJydr8uTJ2rdvnyTp7NmzamlpUUJCQtBxCQkJl9znclFxcbEcDkdgS05O7urTAAAAYRTyW0KhSk1NVWpqauDxxIkTdezYMb3yyiv63e9+16k5CwoKlJ+fH3js8/kILQAARLAuDyxtmTBhgnbs2CFJGjhwoKKjo9XQ0BBU09DQIKfT2ebxdrtddru9y/sEAABmCMv3sNTW1ioxMVGSFBMTo/Hjx6uysjKwv7W1VZWVlcrMzAxHewAAwDAhX2FpbGzU0aNHA4/r6upUW1urAQMG6Oabb1ZBQYG+/PJLvfXWW5KkZcuWKSUlRaNHj9Y333yjN954Qx9++KE++OCDwBz5+fnKzc3V7bffrgkTJmjZsmXy+/2BTw0BAICeLeTAsnfvXk2ZMiXw+OK9JLm5uSorK1N9fb2OHz8e2N/c3KzHHntMX375pfr06aOxY8fqT3/6U9Acs2bN0pkzZ1RYWCiPx6P09HRVVFRcciMuAADomWyWZVnhbuJq+Xw+ORwOeb1excXFXfP5M9euueZzAkBXqc55INwtAB0Syu9v/pYQAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYL+TAsn37ds2YMUNJSUmy2WwqLy+/bP3bb7+te++9V4MGDVJcXJwyMzP1/vvvB9U8++yzstlsQdvIkSNDbQ0AAESokAOL3+9XWlqaSkpKOlS/fft23XvvvdqyZYtqamo0ZcoUzZgxQ/v37w+qGz16tOrr6wPbjh07Qm0NAABEqF6hHpCVlaWsrKwO1y9btizo8b//+7/rnXfe0X//939r3Lhx3zfSq5ecTmeo7QAAgB6g2+9haW1t1YULFzRgwICg8SNHjigpKUnDhg3TT3/6Ux0/frzdOZqamuTz+YI2AAAQubo9sLz88stqbGzU/fffHxjLyMhQWVmZKioqtGLFCtXV1enuu+/WhQsX2pyjuLhYDocjsCUnJ3dX+wAAIAy6NbCsWbNGS5Ys0YYNGxQfHx8Yz8rK0n333aexY8fK7XZry5YtOn/+vDZs2NDmPAUFBfJ6vYHtxIkT3XUKAAAgDEK+h6Wz1q1bp3nz5mnjxo1yuVyXre3Xr59uvfVWHT16tM39drtddru9K9oEAAAG6pYrLGvXrlVeXp7Wrl2r6dOnX7G+sbFRx44dU2JiYjd0BwAATBfyFZbGxsagKx91dXWqra3VgAEDdPPNN6ugoEBffvml3nrrLUnfvQ2Um5ur5cuXKyMjQx6PR5LUu3dvORwOSdLjjz+uGTNmaMiQITp16pSKiooUHR2tnJyca3GOAADgOhfyFZa9e/dq3LhxgY8k5+fna9y4cSosLJQk1dfXB33C57XXXtP//u//auHChUpMTAxsjz76aKDm5MmTysnJUWpqqu6//3796Ec/0q5duzRo0KCrPT8AABABbJZlWeFu4mr5fD45HA55vV7FxcVd8/kz16655nMCQFepznkg3C0AHRLK72/+lhAAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIwXcmDZvn27ZsyYoaSkJNlsNpWXl1/xmKqqKv34xz+W3W7X8OHDVVZWdklNSUmJhg4dqtjYWGVkZGjPnj2htgYAACJUyIHF7/crLS1NJSUlHaqvq6vT9OnTNWXKFNXW1mrRokWaN2+e3n///UDN+vXrlZ+fr6KiIu3bt09paWlyu906ffp0qO0BAIAIZLMsy+r0wTabNm/erOzs7HZrfvnLX+q9997TwYMHA2OzZ8/W+fPnVVFRIUnKyMjQHXfcoV//+teSpNbWViUnJ+vnP/+5Fi9efMU+fD6fHA6HvF6v4uLiOns67cpcu+aazwnYvu30f3rAZX10//3hbgERyB57wzWfM5Tf372u+U//gerqarlcrqAxt9utRYsWSZKam5tVU1OjgoKCwP6oqCi5XC5VV1e3OWdTU5OampoCj30+37VvHOhit/7hbLhbQIT6lz/8JtwtIAKVvf9oWH9+l9906/F4lJCQEDSWkJAgn8+nv/zlLzp79qxaWlrarPF4PG3OWVxcLIfDEdiSk5O7rH8AABB+XX6FpSsUFBQoPz8/8Njn8xFacN35fz8dGO4WEKF4SwiRqMsDi9PpVENDQ9BYQ0OD4uLi1Lt3b0VHRys6OrrNGqfT2eacdrtddru9y3oGuoN1gy3cLSBCdcW9BkC4dflbQpmZmaqsrAwa27p1qzIzMyVJMTExGj9+fFBNa2urKisrAzUAAKBnCzmwNDY2qra2VrW1tZK++9hybW2tjh8/Lum7t2vmzJkTqP/Zz36mP//5z3ryySf12Wef6Te/+Y02bNigX/ziF4Ga/Px8vf7661q9erUOHTqkBQsWyO/3Ky8v7ypPDwAARIKQ3xLau3evpkyZEnh88V6S3NxclZWVqb6+PhBeJCklJUXvvfeefvGLX2j58uUaPHiw3njjDbnd7kDNrFmzdObMGRUWFsrj8Sg9PV0VFRWX3IgLAAB6pqv6HhZT8D0sAPC96pwHwt0C0CGh/P7mbwkBAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxOhVYSkpKNHToUMXGxiojI0N79uxpt3by5Mmy2WyXbNOnTw/UPPTQQ5fsnzZtWmdaAwAAEahXqAesX79e+fn5Ki0tVUZGhpYtWya3263Dhw8rPj7+kvq3335bzc3Ngcfnzp1TWlqa7rvvvqC6adOm6c033ww8ttvtobYGAAAiVMhXWJYuXar58+crLy9Po0aNUmlpqfr06aNVq1a1WT9gwAA5nc7AtnXrVvXp0+eSwGK324Pq+vfv37kzAgAAESekwNLc3Kyamhq5XK7vJ4iKksvlUnV1dYfmWLlypWbPnq0bb7wxaLyqqkrx8fFKTU3VggULdO7cuVBaAwAAESykt4TOnj2rlpYWJSQkBI0nJCTos88+u+Lxe/bs0cGDB7Vy5cqg8WnTpukf/uEflJKSomPHjumpp55SVlaWqqurFR0dfck8TU1NampqCjz2+XyhnAYAALjOhHwPy9VYuXKlxowZowkTJgSNz549O/DvY8aM0dixY3XLLbeoqqpK99xzzyXzFBcXa8mSJV3eLwAAMENIbwkNHDhQ0dHRamhoCBpvaGiQ0+m87LF+v1/r1q3T3Llzr/hzhg0bpoEDB+ro0aNt7i8oKJDX6w1sJ06c6PhJAACA605IgSUmJkbjx49XZWVlYKy1tVWVlZXKzMy87LEbN25UU1OT/umf/umKP+fkyZM6d+6cEhMT29xvt9sVFxcXtAEAgMgV8qeE8vPz9frrr2v16tU6dOiQFixYIL/fr7y8PEnSnDlzVFBQcMlxK1euVHZ2tn70ox8FjTc2NuqJJ57Qrl279Pnnn6uyslIzZ87U8OHD5Xa7O3laAAAgkoR8D8usWbN05swZFRYWyuPxKD09XRUVFYEbcY8fP66oqOAcdPjwYe3YsUMffPDBJfNFR0frk08+0erVq3X+/HklJSVp6tSpeu655/guFgAAIEmyWZZlhbuJq+Xz+eRwOOT1ervk7aHMtWuu+ZwA0FWqcx4IdwtAh4Ty+5u/JQQAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAON1KrCUlJRo6NChio2NVUZGhvbs2dNubVlZmWw2W9AWGxsbVGNZlgoLC5WYmKjevXvL5XLpyJEjnWkNAABEoJADy/r165Wfn6+ioiLt27dPaWlpcrvdOn36dLvHxMXFqb6+PrB98cUXQftfeuklvfrqqyotLdXu3bt14403yu1265tvvgn9jAAAQMQJObAsXbpU8+fPV15enkaNGqXS0lL16dNHq1atavcYm80mp9MZ2BISEgL7LMvSsmXL9PTTT2vmzJkaO3as3nrrLZ06dUrl5eWdOikAABBZQgoszc3Nqqmpkcvl+n6CqCi5XC5VV1e3e1xjY6OGDBmi5ORkzZw5U59++mlgX11dnTweT9CcDodDGRkZ7c7Z1NQkn88XtAEAgMgVUmA5e/asWlpagq6QSFJCQoI8Hk+bx6SmpmrVqlV655139Pvf/16tra2aOHGiTp48KUmB40KZs7i4WA6HI7AlJyeHchoAAOA60+WfEsrMzNScOXOUnp6uSZMm6e2339agQYP029/+ttNzFhQUyOv1BrYTJ05cw44BAIBpQgosAwcOVHR0tBoaGoLGGxoa5HQ6OzTHDTfcoHHjxuno0aOSFDgulDntdrvi4uKCNgAAELlCCiwxMTEaP368KisrA2Otra2qrKxUZmZmh+ZoaWnRgQMHlJiYKElKSUmR0+kMmtPn82n37t0dnhMAAES2XqEekJ+fr9zcXN1+++2aMGGCli1bJr/fr7y8PEnSnDlzdNNNN6m4uFiS9G//9m+68847NXz4cJ0/f17/8R//oS+++ELz5s2T9N0niBYtWqTnn39eI0aMUEpKip555hklJSUpOzv72p0pAAC4boUcWGbNmqUzZ86osLBQHo9H6enpqqioCNw0e/z4cUVFfX/h5quvvtL8+fPl8XjUv39/jR8/Xjt37tSoUaMCNU8++aT8fr8efvhhnT9/XnfddZcqKiou+YI5AADQM9ksy7LC3cTV8vl8cjgc8nq9XXI/S+baNdd8TgDoKtU5D4S7BaBDQvn9zd8SAgAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8ToVWEpKSjR06FDFxsYqIyNDe/bsabf29ddf1913363+/furf//+crlcl9Q/9NBDstlsQdu0adM60xoAAIhAIQeW9evXKz8/X0VFRdq3b5/S0tLkdrt1+vTpNuurqqqUk5Ojjz76SNXV1UpOTtbUqVP15ZdfBtVNmzZN9fX1gW3t2rWdOyMAABBxQg4sS5cu1fz585WXl6dRo0aptLRUffr00apVq9qs/8Mf/qB//dd/VXp6ukaOHKk33nhDra2tqqysDKqz2+1yOp2BrX///p07IwAAEHFCCizNzc2qqamRy+X6foKoKLlcLlVXV3dojq+//lrffvutBgwYEDReVVWl+Ph4paamasGCBTp37ly7czQ1Ncnn8wVtAAAgcoUUWM6ePauWlhYlJCQEjSckJMjj8XRojl/+8pdKSkoKCj3Tpk3TW2+9pcrKSr344ovatm2bsrKy1NLS0uYcxcXFcjgcgS05OTmU0wAAANeZXt35w1544QWtW7dOVVVVio2NDYzPnj078O9jxozR2LFjdcstt6iqqkr33HPPJfMUFBQoPz8/8Njn8xFaAACIYCFdYRk4cKCio6PV0NAQNN7Q0CCn03nZY19++WW98MIL+uCDDzR27NjL1g4bNkwDBw7U0aNH29xvt9sVFxcXtAEAgMgVUmCJiYnR+PHjg26YvXgDbWZmZrvHvfTSS3ruuedUUVGh22+//Yo/5+TJkzp37pwSExNDaQ8AAESokD8llJ+fr9dff12rV6/WoUOHtGDBAvn9fuXl5UmS5syZo4KCgkD9iy++qGeeeUarVq3S0KFD5fF45PF41NjYKElqbGzUE088oV27dunzzz9XZWWlZs6cqeHDh8vtdl+j0wQAANezkO9hmTVrls6cOaPCwkJ5PB6lp6eroqIicCPu8ePHFRX1fQ5asWKFmpub9Y//+I9B8xQVFenZZ59VdHS0PvnkE61evVrnz59XUlKSpk6dqueee052u/0qTw8AAEQCm2VZVribuFo+n08Oh0Ner7dL7mfJXLvmms8JAF2lOueBcLcAdEgov7/5W0IAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGC8TgWWkpISDR06VLGxscrIyNCePXsuW79x40aNHDlSsbGxGjNmjLZs2RK037IsFRYWKjExUb1795bL5dKRI0c60xoAAIhAIQeW9evXKz8/X0VFRdq3b5/S0tLkdrt1+vTpNut37typnJwczZ07V/v371d2drays7N18ODBQM1LL72kV199VaWlpdq9e7duvPFGud1uffPNN50/MwAAEDFslmVZoRyQkZGhO+64Q7/+9a8lSa2trUpOTtbPf/5zLV68+JL6WbNmye/369133w2M3XnnnUpPT1dpaaksy1JSUpIee+wxPf7445Ikr9erhIQElZWVafbs2VfsyefzyeFwyOv1Ki4uLpTT6ZDMtWuu+ZwA0FWqcx4IdwtAh4Ty+zukKyzNzc2qqamRy+X6foKoKLlcLlVXV7d5THV1dVC9JLnd7kB9XV2dPB5PUI3D4VBGRka7czY1Ncnn8wVtAAAgcvUKpfjs2bNqaWlRQkJC0HhCQoI+++yzNo/xeDxt1ns8nsD+i2Pt1fxQcXGxlixZEkrrV4X/WwEAILyuy08JFRQUyOv1BrYTJ06EuyUAANCFQgosAwcOVHR0tBoaGoLGGxoa5HQ62zzG6XRetv7iP0OZ0263Ky4uLmgDAACRK6TAEhMTo/Hjx6uysjIw1traqsrKSmVmZrZ5TGZmZlC9JG3dujVQn5KSIqfTGVTj8/m0e/fuducEAAA9S0j3sEhSfn6+cnNzdfvtt2vChAlatmyZ/H6/8vLyJElz5szRTTfdpOLiYknSo48+qkmTJulXv/qVpk+frnXr1mnv3r167bXXJEk2m02LFi3S888/rxEjRiglJUXPPPOMkpKSlJ2dfe3OFAAAXLdCDiyzZs3SmTNnVFhYKI/Ho/T0dFVUVARumj1+/Liior6/cDNx4kStWbNGTz/9tJ566imNGDFC5eXluu222wI1Tz75pPx+vx5++GGdP39ed911lyoqKhQbG3sNThEAAFzvQv4eFhN19fewAACAa6/LvocFAAAgHAgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGC/mL40x08atkfD5fmDsBAAAddfH3dke+Ei4iAsuFCxckScnJyWHuBAAAhOrChQtyOByXrYmIb7ptbW3VqVOn1LdvX9lstms6t8/nU3Jysk6cOMG36F4Ba9VxrFXHsVahYb06jrXquK5aK8uydOHCBSUlJQX9WZ+2RMQVlqioKA0ePLhLf0ZcXBxP6A5irTqOteo41io0rFfHsVYd1xVrdaUrKxdx0y0AADAegQUAABiPwHIFdrtdRUVFstvt4W7FeKxVx7FWHcdahYb16jjWquNMWKuIuOkWAABENq6wAAAA4xFYAACA8QgsAADAeAQWAABgPAKLpJKSEg0dOlSxsbHKyMjQnj17Llu/ceNGjRw5UrGxsRozZoy2bNnSTZ2GXyhrVVZWJpvNFrTFxsZ2Y7fhs337ds2YMUNJSUmy2WwqLy+/4jFVVVX68Y9/LLvdruHDh6usrKzL+zRBqGtVVVV1yfPKZrPJ4/F0T8NhVFxcrDvuuEN9+/ZVfHy8srOzdfjw4Sse1xNfszqzVj31NWvFihUaO3Zs4EvhMjMz9cc//vGyx4TjOdXjA8v69euVn5+voqIi7du3T2lpaXK73Tp9+nSb9Tt37lROTo7mzp2r/fv3Kzs7W9nZ2Tp48GA3d979Ql0r6btvRayvrw9sX3zxRTd2HD5+v19paWkqKSnpUH1dXZ2mT5+uKVOmqLa2VosWLdK8efP0/vvvd3Gn4RfqWl10+PDhoOdWfHx8F3Vojm3btmnhwoXatWuXtm7dqm+//VZTp06V3+9v95ie+prVmbWSeuZr1uDBg/XCCy+opqZGe/fu1d/+7d9q5syZ+vTTT9usD9tzyurhJkyYYC1cuDDwuKWlxUpKSrKKi4vbrL///vut6dOnB41lZGRY//Iv/9KlfZog1LV68803LYfD0U3dmUuStXnz5svWPPnkk9bo0aODxmbNmmW53e4u7Mw8HVmrjz76yJJkffXVV93Sk8lOnz5tSbK2bdvWbk1Pfs36vzqyVrxmfa9///7WG2+80ea+cD2nevQVlubmZtXU1MjlcgXGoqKi5HK5VF1d3eYx1dXVQfWS5Ha7262PFJ1ZK0lqbGzUkCFDlJycfNnE3tP11OfV1UhPT1diYqLuvfdeffzxx+FuJyy8Xq8kacCAAe3W8Nz6TkfWSuI1q6WlRevWrZPf71dmZmabNeF6TvXowHL27Fm1tLQoISEhaDwhIaHd98M9Hk9I9ZGiM2uVmpqqVatW6Z133tHvf/97tba2auLEiTp58mR3tHxdae955fP59Je//CVMXZkpMTFRpaWl2rRpkzZt2qTk5GRNnjxZ+/btC3dr3aq1tVWLFi3ST37yE912223t1vXU16z/q6Nr1ZNfsw4cOKC/+qu/kt1u189+9jNt3rxZo0aNarM2XM+piPhrzTBTZmZmUEKfOHGi/vqv/1q//e1v9dxzz4WxM1zPUlNTlZqaGng8ceJEHTt2TK+88op+97vfhbGz7rVw4UIdPHhQO3bsCHcrxuvoWvXk16zU1FTV1tbK6/Xqv/7rv5Sbm6tt27a1G1rCoUdfYRk4cKCio6PV0NAQNN7Q0CCn09nmMU6nM6T6SNGZtfqhG264QePGjdPRo0e7osXrWnvPq7i4OPXu3TtMXV0/JkyY0KOeV4888ojeffddffTRRxo8ePBla3vqa9ZFoazVD/Wk16yYmBgNHz5c48ePV3FxsdLS0rR8+fI2a8P1nOrRgSUmJkbjx49XZWVlYKy1tVWVlZXtvneXmZkZVC9JW7dubbc+UnRmrX6opaVFBw4cUGJiYle1ed3qqc+ra6W2trZHPK8sy9IjjzyizZs368MPP1RKSsoVj+mpz63OrNUP9eTXrNbWVjU1NbW5L2zPqS69pfc6sG7dOstut1tlZWXW//zP/1gPP/yw1a9fP8vj8ViWZVkPPvigtXjx4kD9xx9/bPXq1ct6+eWXrUOHDllFRUXWDTfcYB04cCBcp9BtQl2rJUuWWO+//7517Ngxq6amxpo9e7YVGxtrffrpp+E6hW5z4cIFa//+/db+/fstSdbSpUut/fv3W1988YVlWZa1ePFi68EHHwzU//nPf7b69OljPfHEE9ahQ4eskpISKzo62qqoqAjXKXSbUNfqlVdescrLy60jR45YBw4csB599FErKirK+tOf/hSuU+g2CxYssBwOh1VVVWXV19cHtq+//jpQw2vWdzqzVj31NWvx4sXWtm3brLq6OuuTTz6xFi9ebNlsNuuDDz6wLMuc51SPDyyWZVn/+Z//ad18881WTEyMNWHCBGvXrl2BfZMmTbJyc3OD6jds2GDdeuutVkxMjDV69Gjrvffe6+aOwyeUtVq0aFGgNiEhwfq7v/s7a9++fWHouvtd/OjtD7eL65Obm2tNmjTpkmPS09OtmJgYa9iwYdabb77Z7X2HQ6hr9eKLL1q33HKLFRsbaw0YMMCaPHmy9eGHH4an+W7W1jpJCnqu8Jr1nc6sVU99zfrnf/5na8iQIVZMTIw1aNAg65577gmEFcsy5zllsyzL6tprOAAAAFenR9/DAgAArg8EFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAY7/8Dhnoln36uOHwAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"line = LineString([(1, 1), (3, 1)])\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" line, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # line\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon x line --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- line x polygon --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "4ca1b8b1-e9b9-4638-a54b-a05139f470cc",
"metadata": {},
"source": [
"### Line ends at polygon boundary"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c8d4cf3c-f3cf-49a4-aa82-cf1eae7a7806",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon x line --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF1F00212\n",
"-- line x polygon --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F01102\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAF2CAYAAABNisPlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAniUlEQVR4nO3dfXBUZZr+8asTTAdc0sBA0olECIJhQUgYlBhGF1hbmixFkdlahTgrMQs4w+CUTFSGWJrIam3UdRDcyRBfwODM8rpIrFUmykQDhQQoAinBRQqYKCDp8FLSTdoxuMn5/eGPdlsSSAeSfuh8P1WnpJ9znyf3eaqrc3n6dMdmWZYlAAAAg0WFuwEAAIArIbAAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIzXI9wNXAstLS06efKkevfuLZvNFu52AABAO1iWpfPnzyspKUlRUZe/hhIRgeXkyZNKTk4OdxsAAKADjh8/roEDB162JiICS+/evSV9d8JxcXFh7gYAALSHz+dTcnJy4Pf45UREYLn4NlBcXByBBQCA60x7bufgplsAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHghBZbi4mLdcccd6t27t+Lj45Wdna1Dhw5d8bgNGzZo+PDhio2N1ahRo7R58+ag/ZZlqbCwUImJierZs6dcLpcOHz4c2pkAAICIFVJg2bp1q+bPn6+dO3dqy5Yt+vbbbzV58mT5/f42j9mxY4dycnI0e/Zs7du3T9nZ2crOztaBAwcCNS+++KJeeeUVlZaWateuXbrxxhvldrv1zTffdPzMAABAxLBZlmV19ODTp08rPj5eW7du1d/93d+1WjNjxgz5/X69++67gbE777xT6enpKi0tlWVZSkpK0mOPPabHH39ckuT1epWQkKCysjLNnDnzin34fD45HA55vV6+mh8AgOtEKL+/r+oeFq/XK0nq169fmzXV1dVyuVxBY263W9XV1ZKkuro6eTyeoBqHw6GMjIxAzQ81NTXJ5/MFbQAAIHJ1+I8ftrS0aMGCBfrJT36i2267rc06j8ejhISEoLGEhAR5PJ7A/otjbdX8UHFxsRYvXtzR1kOWuWZ1l/0sALha1TkPhLsF4Jrr8BWW+fPn68CBA1q7du217KddCgoK5PV6A9vx48e7vAcAANB1OnSF5ZFHHtG7776rbdu2aeDAgZetdTqdamhoCBpraGiQ0+kM7L84lpiYGFSTnp7e6px2u112u70jrQMAgOtQSFdYLMvSI488ok2bNunDDz9USkrKFY/JzMxUZWVl0NiWLVuUmZkpSUpJSZHT6Qyq8fl82rVrV6AGAAB0byFdYZk/f75Wr16td955R7179w7cY+JwONSzZ09J0qxZs3TTTTepuLhYkvToo49qwoQJ+u1vf6upU6dq7dq12rNnj1577TVJks1m04IFC/Tcc89p2LBhSklJ0dNPP62kpCRlZ2dfw1MFAADXq5ACy/LlyyVJEydODBp/88039dBDD0mSjh07pqio7y/cjB8/XqtXr9ZTTz2lJ598UsOGDVN5eXnQjboLFy6U3+/Xww8/rHPnzumuu+5SRUWFYmNjO3haAAAgklzV97CYorO/h4VPCQG4nvApIVwvuux7WAAAALoCgQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABgv5MCybds2TZs2TUlJSbLZbCovL79s/UMPPSSbzXbJNnLkyEDNM888c8n+4cOHh3wyAAAgMoUcWPx+v9LS0lRSUtKu+mXLlqm+vj6wHT9+XP369dN9990XVDdy5Miguu3bt4faGgAAiFA9Qj0gKytLWVlZ7a53OBxyOByBx+Xl5frqq6+Ul5cX3EiPHnI6naG2AwAAuoEuv4dlxYoVcrlcGjRoUND44cOHlZSUpCFDhuhnP/uZjh071uYcTU1N8vl8QRsAAIhcXRpYTp48qT/96U+aM2dO0HhGRobKyspUUVGh5cuXq66uTnfffbfOnz/f6jzFxcWBKzcOh0PJycld0T4AAAiTLg0sq1atUp8+fZSdnR00npWVpfvuu0+jR4+W2+3W5s2bde7cOa1fv77VeQoKCuT1egPb8ePHu6B7AAAQLiHfw9JRlmVp5cqVevDBBxUTE3PZ2j59+ujWW2/VkSNHWt1vt9tlt9s7o00AAGCgLrvCsnXrVh05ckSzZ8++Ym1jY6OOHj2qxMTELugMAACYLuTA0tjYqNraWtXW1kqS6urqVFtbG7hJtqCgQLNmzbrkuBUrVigjI0O33XbbJfsef/xxbd26VZ9//rl27Nihn/70p4qOjlZOTk6o7QEAgAgU8ltCe/bs0aRJkwKP8/PzJUm5ubkqKytTfX39JZ/w8Xq92rhxo5YtW9bqnCdOnFBOTo7Onj2rAQMG6K677tLOnTs1YMCAUNsDAAARKOTAMnHiRFmW1eb+srKyS8YcDoe+/vrrNo9Zu3ZtqG0AAIBuhL8lBAAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA44UcWLZt26Zp06YpKSlJNptN5eXll62vqqqSzWa7ZPN4PEF1JSUlGjx4sGJjY5WRkaHdu3eH2hoAAIhQIQcWv9+vtLQ0lZSUhHTcoUOHVF9fH9ji4+MD+9atW6f8/HwVFRVp7969SktLk9vt1qlTp0JtDwAARKAeoR6QlZWlrKyskH9QfHy8+vTp0+q+JUuWaO7cucrLy5MklZaW6r333tPKlSu1aNGikH8WAACILF12D0t6eroSExN177336uOPPw6MX7hwQTU1NXK5XN83FRUll8ul6urqVudqamqSz+cL2gAAQOTq9MCSmJio0tJSbdy4URs3blRycrImTpyovXv3SpLOnDmj5uZmJSQkBB2XkJBwyX0uFxUXF8vhcAS25OTkzj4NAAAQRiG/JRSq1NRUpaamBh6PHz9eR48e1csvv6w//OEPHZqzoKBA+fn5gcc+n4/QAgBABOv0wNKacePGafv27ZKk/v37Kzo6Wg0NDUE1DQ0NcjqdrR5vt9tlt9s7vU8AAGCGsHwPS21trRITEyVJMTExGjt2rCorKwP7W1paVFlZqczMzHC0BwAADBPyFZbGxkYdOXIk8Liurk61tbXq16+fbr75ZhUUFOjLL7/UW2+9JUlaunSpUlJSNHLkSH3zzTd644039OGHH+qDDz4IzJGfn6/c3FzdfvvtGjdunJYuXSq/3x/41BAAAOjeQg4se/bs0aRJkwKPL95Lkpubq7KyMtXX1+vYsWOB/RcuXNBjjz2mL7/8Ur169dLo0aP15z//OWiOGTNm6PTp0yosLJTH41F6eroqKiouuREXAAB0TzbLsqxwN3G1fD6fHA6HvF6v4uLirvn8mWtWX/M5AaCzVOc8EO4WgHYJ5fc3f0sIAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMF3Jg2bZtm6ZNm6akpCTZbDaVl5dftv7tt9/WvffeqwEDBiguLk6ZmZl6//33g2qeeeYZ2Wy2oG348OGhtgYAACJUyIHF7/crLS1NJSUl7arftm2b7r33Xm3evFk1NTWaNGmSpk2bpn379gXVjRw5UvX19YFt+/btobYGAAAiVI9QD8jKylJWVla765cuXRr0+N/+7d/0zjvv6L//+781ZsyY7xvp0UNOpzPUdgAAQDfQ5fewtLS06Pz58+rXr1/Q+OHDh5WUlKQhQ4boZz/7mY4dO9bmHE1NTfL5fEEbAACIXF0eWF566SU1Njbq/vvvD4xlZGSorKxMFRUVWr58uerq6nT33Xfr/Pnzrc5RXFwsh8MR2JKTk7uqfQAAEAZdGlhWr16txYsXa/369YqPjw+MZ2Vl6b777tPo0aPldru1efNmnTt3TuvXr291noKCAnm93sB2/PjxrjoFAAAQBiHfw9JRa9eu1Zw5c7Rhwwa5XK7L1vbp00e33nqrjhw50up+u90uu93eGW0CAAADdckVljVr1igvL09r1qzR1KlTr1jf2Nioo0ePKjExsQu6AwAApgv5CktjY2PQlY+6ujrV1taqX79+uvnmm1VQUKAvv/xSb731lqTv3gbKzc3VsmXLlJGRIY/HI0nq2bOnHA6HJOnxxx/XtGnTNGjQIJ08eVJFRUWKjo5WTk7OtThHAABwnQv5CsuePXs0ZsyYwEeS8/PzNWbMGBUWFkqS6uvrgz7h89prr+l///d/NX/+fCUmJga2Rx99NFBz4sQJ5eTkKDU1Vffff79+9KMfaefOnRowYMDVnh8AAIgANsuyrHA3cbV8Pp8cDoe8Xq/i4uKu+fyZa1Zf8zkBoLNU5zwQ7haAdgnl9zd/SwgAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYLObBs27ZN06ZNU1JSkmw2m8rLy694TFVVlX784x/Lbrdr6NChKisru6SmpKREgwcPVmxsrDIyMrR79+5QWwMAABEq5MDi9/uVlpamkpKSdtXX1dVp6tSpmjRpkmpra7VgwQLNmTNH77//fqBm3bp1ys/PV1FRkfbu3au0tDS53W6dOnUq1PYAAEAEslmWZXX4YJtNmzZtUnZ2dps1v/nNb/Tee+/pwIEDgbGZM2fq3LlzqqiokCRlZGTojjvu0O9+9ztJUktLi5KTk/WrX/1KixYtumIfPp9PDodDXq9XcXFxHT2dNmWuWX3N5wSAzlL10/vC3QIikD32hms+Zyi/v3tc85/+A9XV1XK5XEFjbrdbCxYskCRduHBBNTU1KigoCOyPioqSy+VSdXV1q3M2NTWpqakp8Njn8137xgHgOvXz6b8PdwuIQGXvPxrWn9/pN916PB4lJCQEjSUkJMjn8+mvf/2rzpw5o+bm5lZrPB5Pq3MWFxfL4XAEtuTk5E7rHwAAhF+nX2HpDAUFBcrPzw889vl8hBYA+P9efeeX4W4BuOY6PbA4nU41NDQEjTU0NCguLk49e/ZUdHS0oqOjW61xOp2tzmm322W32zutZwC4nnXGvQZAuHX6W0KZmZmqrKwMGtuyZYsyMzMlSTExMRo7dmxQTUtLiyorKwM1AACgews5sDQ2Nqq2tla1tbWSvvvYcm1trY4dOybpu7drZs2aFaj/xS9+ob/85S9auHChPvvsM/3+97/X+vXr9etf/zpQk5+fr9dff12rVq3SwYMHNW/ePPn9fuXl5V3l6QEAgEgQ8ltCe/bs0aRJkwKPL95Lkpubq7KyMtXX1wfCiySlpKTovffe069//WstW7ZMAwcO1BtvvCG32x2omTFjhk6fPq3CwkJ5PB6lp6eroqLikhtxAQBA93RV38NiCr6HBQC+V53zQLhbANollN/f/C0hAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwXocCS0lJiQYPHqzY2FhlZGRo9+7dbdZOnDhRNpvtkm3q1KmBmoceeuiS/VOmTOlIawAAIAL1CPWAdevWKT8/X6WlpcrIyNDSpUvldrt16NAhxcfHX1L/9ttv68KFC4HHZ8+eVVpamu67776guilTpujNN98MPLbb7aG2BgAAIlTIV1iWLFmiuXPnKi8vTyNGjFBpaal69eqllStXtlrfr18/OZ3OwLZlyxb16tXrksBit9uD6vr27duxMwIAABEnpMBy4cIF1dTUyOVyfT9BVJRcLpeqq6vbNceKFSs0c+ZM3XjjjUHjVVVVio+PV2pqqubNm6ezZ8+G0hoAAIhgIb0ldObMGTU3NyshISFoPCEhQZ999tkVj9+9e7cOHDigFStWBI1PmTJF//iP/6iUlBQdPXpUTz75pLKyslRdXa3o6OhL5mlqalJTU1Pgsc/nC+U0AADAdSbke1iuxooVKzRq1CiNGzcuaHzmzJmBf48aNUqjR4/WLbfcoqqqKt1zzz2XzFNcXKzFixd3er8AAMAMIb0l1L9/f0VHR6uhoSFovKGhQU6n87LH+v1+rV27VrNnz77izxkyZIj69++vI0eOtLq/oKBAXq83sB0/frz9JwEAAK47IQWWmJgYjR07VpWVlYGxlpYWVVZWKjMz87LHbtiwQU1NTfrnf/7nK/6cEydO6OzZs0pMTGx1v91uV1xcXNAGAAAiV8ifEsrPz9frr7+uVatW6eDBg5o3b578fr/y8vIkSbNmzVJBQcElx61YsULZ2dn60Y9+FDTe2NioJ554Qjt37tTnn3+uyspKTZ8+XUOHDpXb7e7gaQEAgEgS8j0sM2bM0OnTp1VYWCiPx6P09HRVVFQEbsQ9duyYoqKCc9ChQ4e0fft2ffDBB5fMFx0drU8++USrVq3SuXPnlJSUpMmTJ+vZZ5/lu1gAAIAkyWZZlhXuJq6Wz+eTw+GQ1+vtlLeHMtesvuZzAkBnqc55INwtAO0Syu9v/pYQAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACM16HAUlJSosGDBys2NlYZGRnavXt3m7VlZWWy2WxBW2xsbFCNZVkqLCxUYmKievbsKZfLpcOHD3ekNQAAEIFCDizr1q1Tfn6+ioqKtHfvXqWlpcntduvUqVNtHhMXF6f6+vrA9sUXXwTtf/HFF/XKK6+otLRUu3bt0o033ii3261vvvkm9DMCAAARJ+TAsmTJEs2dO1d5eXkaMWKESktL1atXL61cubLNY2w2m5xOZ2BLSEgI7LMsS0uXLtVTTz2l6dOna/To0Xrrrbd08uRJlZeXd+ikAABAZAkpsFy4cEE1NTVyuVzfTxAVJZfLperq6jaPa2xs1KBBg5ScnKzp06fr008/Deyrq6uTx+MJmtPhcCgjI6PNOZuamuTz+YI2AAAQuUIKLGfOnFFzc3PQFRJJSkhIkMfjafWY1NRUrVy5Uu+8847++Mc/qqWlRePHj9eJEyckKXBcKHMWFxfL4XAEtuTk5FBOAwAAXGc6/VNCmZmZmjVrltLT0zVhwgS9/fbbGjBggF599dUOz1lQUCCv1xvYjh8/fg07BgAApgkpsPTv31/R0dFqaGgIGm9oaJDT6WzXHDfccIPGjBmjI0eOSFLguFDmtNvtiouLC9oAAEDkCimwxMTEaOzYsaqsrAyMtbS0qLKyUpmZme2ao7m5Wfv371diYqIkKSUlRU6nM2hOn8+nXbt2tXtOAAAQ2XqEekB+fr5yc3N1++23a9y4cVq6dKn8fr/y8vIkSbNmzdJNN92k4uJiSdK//uu/6s4779TQoUN17tw5/fu//7u++OILzZkzR9J3nyBasGCBnnvuOQ0bNkwpKSl6+umnlZSUpOzs7Gt3pgAA4LoVcmCZMWOGTp8+rcLCQnk8HqWnp6uioiJw0+yxY8cUFfX9hZuvvvpKc+fOlcfjUd++fTV27Fjt2LFDI0aMCNQsXLhQfr9fDz/8sM6dO6e77rpLFRUVl3zBHAAA6J5slmVZ4W7iavl8PjkcDnm93k65nyVzzeprPicAdJbqnAfC3QLQLqH8/uZvCQEAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgdCiwlJSUaPHiwYmNjlZGRod27d7dZ+/rrr+vuu+9W37591bdvX7lcrkvqH3roIdlstqBtypQpHWkNAABEoJADy7p165Sfn6+ioiLt3btXaWlpcrvdOnXqVKv1VVVVysnJ0UcffaTq6molJydr8uTJ+vLLL4PqpkyZovr6+sC2Zs2ajp0RAACIOCEHliVLlmju3LnKy8vTiBEjVFpaql69emnlypWt1v/nf/6nfvnLXyo9PV3Dhw/XG2+8oZaWFlVWVgbV2e12OZ3OwNa3b9+OnREAAIg4IQWWCxcuqKamRi6X6/sJoqLkcrlUXV3drjm+/vprffvtt+rXr1/QeFVVleLj45Wamqp58+bp7Nmzbc7R1NQkn88XtAEAgMgVUmA5c+aMmpublZCQEDSekJAgj8fTrjl+85vfKCkpKSj0TJkyRW+99ZYqKyv1wgsvaOvWrcrKylJzc3OrcxQXF8vhcAS25OTkUE4DAABcZ3p05Q97/vnntXbtWlVVVSk2NjYwPnPmzMC/R40apdGjR+uWW25RVVWV7rnnnkvmKSgoUH5+fuCxz+cjtAAAEMFCusLSv39/RUdHq6GhIWi8oaFBTqfzsse+9NJLev755/XBBx9o9OjRl60dMmSI+vfvryNHjrS63263Ky4uLmgDAACRK6TAEhMTo7FjxwbdMHvxBtrMzMw2j3vxxRf17LPPqqKiQrfffvsVf86JEyd09uxZJSYmhtIeAACIUCF/Sig/P1+vv/66Vq1apYMHD2revHny+/3Ky8uTJM2aNUsFBQWB+hdeeEFPP/20Vq5cqcGDB8vj8cjj8aixsVGS1NjYqCeeeEI7d+7U559/rsrKSk2fPl1Dhw6V2+2+RqcJAACuZyHfwzJjxgydPn1ahYWF8ng8Sk9PV0VFReBG3GPHjikq6vsctHz5cl24cEH/9E//FDRPUVGRnnnmGUVHR+uTTz7RqlWrdO7cOSUlJWny5Ml69tlnZbfbr/L0AABAJLBZlmWFu4mr5fP55HA45PV6O+V+lsw1q6/5nADQWapzHgh3C0C7hPL7m78lBAAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADjEVgAAIDxCCwAAMB4BBYAAGA8AgsAADAegQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxutQYCkpKdHgwYMVGxurjIwM7d69+7L1GzZs0PDhwxUbG6tRo0Zp8+bNQfsty1JhYaESExPVs2dPuVwuHT58uCOtAQCACBRyYFm3bp3y8/NVVFSkvXv3Ki0tTW63W6dOnWq1fseOHcrJydHs2bO1b98+ZWdnKzs7WwcOHAjUvPjii3rllVdUWlqqXbt26cYbb5Tb7dY333zT8TMDAAARw2ZZlhXKARkZGbrjjjv0u9/9TpLU0tKi5ORk/epXv9KiRYsuqZ8xY4b8fr/efffdwNidd96p9PR0lZaWyrIsJSUl6bHHHtPjjz8uSfJ6vUpISFBZWZlmzpx5xZ58Pp8cDoe8Xq/i4uJCOZ12yVyz+prPCQCdpTrngXC3ALRLKL+/Q7rCcuHCBdXU1Mjlcn0/QVSUXC6XqqurWz2muro6qF6S3G53oL6urk4ejyeoxuFwKCMjo805m5qa5PP5gjYAABC5eoRSfObMGTU3NyshISFoPCEhQZ999lmrx3g8nlbrPR5PYP/FsbZqfqi4uFiLFy8OpfWrwv+tAAAQXtflp4QKCgrk9XoD2/Hjx8PdEgAA6EQhBZb+/fsrOjpaDQ0NQeMNDQ1yOp2tHuN0Oi9bf/G/ocxpt9sVFxcXtAEAgMgVUmCJiYnR2LFjVVlZGRhraWlRZWWlMjMzWz0mMzMzqF6StmzZEqhPSUmR0+kMqvH5fNq1a1ebcwIAgO4lpHtYJCk/P1+5ubm6/fbbNW7cOC1dulR+v195eXmSpFmzZummm25ScXGxJOnRRx/VhAkT9Nvf/lZTp07V2rVrtWfPHr322muSJJvNpgULFui5557TsGHDlJKSoqefflpJSUnKzs6+dmcKAACuWyEHlhkzZuj06dMqLCyUx+NRenq6KioqAjfNHjt2TFFR31+4GT9+vFavXq2nnnpKTz75pIYNG6by8nLddtttgZqFCxfK7/fr4Ycf1rlz53TXXXepoqJCsbGx1+AUAQDA9S7k72ExUWd/DwsAALj2Ou17WAAAAMKBwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYLyQvzjORBe/Ssbn84W5EwAA0F4Xf2+35yvhIiKwnD9/XpKUnJwc5k4AAECozp8/L4fDcdmaiPim25aWFp08eVK9e/eWzWa7pnP7fD4lJyfr+PHjfIvuFbBW7cdatR9rFRrWq/1Yq/brrLWyLEvnz59XUlJS0J/1aU1EXGGJiorSwIEDO/VnxMXF8YRuJ9aq/Vir9mOtQsN6tR9r1X6dsVZXurJyETfdAgAA4xFYAACA8QgsV2C321VUVCS73R7uVozHWrUfa9V+rFVoWK/2Y63az4S1ioibbgEAQGTjCgsAADAegQUAABiPwAIAAIxHYAEAAMYjsEgqKSnR4MGDFRsbq4yMDO3evfuy9Rs2bNDw4cMVGxurUaNGafPmzV3UafiFslZlZWWy2WxBW2xsbBd2Gz7btm3TtGnTlJSUJJvNpvLy8iseU1VVpR//+Mey2+0aOnSoysrKOr1PE4S6VlVVVZc8r2w2mzweT9c0HEbFxcW644471Lt3b8XHxys7O1uHDh264nHd8TWrI2vVXV+zli9frtGjRwe+FC4zM1N/+tOfLntMOJ5T3T6wrFu3Tvn5+SoqKtLevXuVlpYmt9utU6dOtVq/Y8cO5eTkaPbs2dq3b5+ys7OVnZ2tAwcOdHHnXS/UtZK++1bE+vr6wPbFF190Ycfh4/f7lZaWppKSknbV19XVaerUqZo0aZJqa2u1YMECzZkzR++//34ndxp+oa7VRYcOHQp6bsXHx3dSh+bYunWr5s+fr507d2rLli369ttvNXnyZPn9/jaP6a6vWR1ZK6l7vmYNHDhQzz//vGpqarRnzx79/d//vaZPn65PP/201fqwPaesbm7cuHHW/PnzA4+bm5utpKQkq7i4uNX6+++/35o6dWrQWEZGhvXzn/+8U/s0Qahr9eabb1oOh6OLujOXJGvTpk2XrVm4cKE1cuTIoLEZM2ZYbre7EzszT3vW6qOPPrIkWV999VWX9GSyU6dOWZKsrVu3tlnTnV+z/q/2rBWvWd/r27ev9cYbb7S6L1zPqW59heXChQuqqamRy+UKjEVFRcnlcqm6urrVY6qrq4PqJcntdrdZHyk6slaS1NjYqEGDBik5Ofmyib27667Pq6uRnp6uxMRE3Xvvvfr444/D3U5YeL1eSVK/fv3arOG59Z32rJXEa1Zzc7PWrl0rv9+vzMzMVmvC9Zzq1oHlzJkzam5uVkJCQtB4QkJCm++HezyekOojRUfWKjU1VStXrtQ777yjP/7xj2ppadH48eN14sSJrmj5utLW88rn8+mvf/1rmLoyU2JiokpLS7Vx40Zt3LhRycnJmjhxovbu3Rvu1rpUS0uLFixYoJ/85Ce67bbb2qzrrq9Z/1d716o7v2bt379ff/M3fyO73a5f/OIX2rRpk0aMGNFqbbieUxHx15phpszMzKCEPn78eP3t3/6tXn31VT377LNh7AzXs9TUVKWmpgYejx8/XkePHtXLL7+sP/zhD2HsrGvNnz9fBw4c0Pbt28PdivHau1bd+TUrNTVVtbW18nq9+q//+i/l5uZq69atbYaWcOjWV1j69++v6OhoNTQ0BI03NDTI6XS2eozT6QypPlJ0ZK1+6IYbbtCYMWN05MiRzmjxutbW8youLk49e/YMU1fXj3HjxnWr59Ujjzyid999Vx999JEGDhx42dru+pp1UShr9UPd6TUrJiZGQ4cO1dixY1VcXKy0tDQtW7as1dpwPae6dWCJiYnR2LFjVVlZGRhraWlRZWVlm+/dZWZmBtVL0pYtW9qsjxQdWasfam5u1v79+5WYmNhZbV63uuvz6lqpra3tFs8ry7L0yCOPaNOmTfrwww+VkpJyxWO663OrI2v1Q935NaulpUVNTU2t7gvbc6pTb+m9Dqxdu9ay2+1WWVmZ9T//8z/Www8/bPXp08fyeDyWZVnWgw8+aC1atChQ//HHH1s9evSwXnrpJevgwYNWUVGRdcMNN1j79+8P1yl0mVDXavHixdb7779vHT161KqpqbFmzpxpxcbGWp9++mm4TqHLnD9/3tq3b5+1b98+S5K1ZMkSa9++fdYXX3xhWZZlLVq0yHrwwQcD9X/5y1+sXr16WU888YR18OBBq6SkxIqOjrYqKirCdQpdJtS1evnll63y8nLr8OHD1v79+61HH33UioqKsv785z+H6xS6zLx58yyHw2FVVVVZ9fX1ge3rr78O1PCa9Z2OrFV3fc1atGiRtXXrVquurs765JNPrEWLFlk2m8364IMPLMsy5znV7QOLZVnWf/zHf1g333yzFRMTY40bN87auXNnYN+ECROs3NzcoPr169dbt956qxUTE2ONHDnSeu+997q44/AJZa0WLFgQqE1ISLD+4R/+wdq7d28Yuu56Fz96+8Pt4vrk5uZaEyZMuOSY9PR0KyYmxhoyZIj15ptvdnnf4RDqWr3wwgvWLbfcYsXGxlr9+vWzJk6caH344Yfhab6LtbZOkoKeK7xmfacja9VdX7P+5V/+xRo0aJAVExNjDRgwwLrnnnsCYcWyzHlO2SzLsjr3Gg4AAMDV6db3sAAAgOsDgQUAABiPwAIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxvt/KE8fjf22cqwAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"line = LineString([(2, 1), (3, 1)])\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" line, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # line\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon x line --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- line x polygon --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "2af46d79-4edb-472e-a1e4-600b3154597b",
"metadata": {},
"source": [
"### Line shares edge with polygon boundary"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "f70e2f59-eef9-4b35-b36c-103ffda79a7a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon x line --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: F11FF0212\n",
"-- line x polygon --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF21F1102\n"
]
},
{
"data": {
"image/png": "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9vxMe/2NHTtWfr9fwWBQL7zwgubMmaOtW7d2GzE7Jd0V2PDhwzVgwAC1tLR02t/S0iKPx9PlMR6PJ6L1sdSX8/u2QYMGadKkSTpw4IAdI0Zdd89fRkaGBg8eHKOp7DVlypS4fv4WLVqkV155RW+++eZp//yRSa+/b0Ryft8W76+/1NRUjRkzRpMnT5bP51NeXp4effTRLtfa/dwlXcBSU1M1efJk1dbWhvd1dHSotra223/H9Xq9ndZLUk1NTbfrY6kv5/dt7e3t2rNnj7KysuwaM6pMev76i9/vj8vnz7IsLVq0SOvXr9fmzZs1atSo0x5j0vPXl/P7NtNefx0dHWpra+vya7Y/d/3yURDDrFmzxnI6nVZ1dbX1j3/8w1qwYIE1dOhQKxAIWJZlWbfddpu1ZMmS8Prt27dbAwcOtB588EFr37591rJly6xBgwZZe/bsidUp9CjS81u+fLm1adMm6+DBg1Z9fb118803W2lpadZ7770Xq1Po0fHjx62GhgaroaHBkmQ99NBDVkNDg3X48GHLsixryZIl1m233RZe/8EHH1jp6enWPffcY+3bt8+qrKy0BgwYYG3cuDFWp9CjSM/v4YcftjZs2GC9//771p49e6y7777bSklJsd54441YnUK37rrrLsvlcllbtmyxmpubw9sXX3wRXmPy668v52fS62/JkiXW1q1brUOHDlnvvvuutWTJEsvhcFivv/66ZVnRf+6SMmCWZVmPPfaYdd5551mpqanWlClTrLfffjv8tWnTpllz5szptP65556zfvCDH1ipqanWhRdeaL366qtRnjgykZxfWVlZeK3b7bZuuOEGa/fu3TGYune++dj4t7dvzmnOnDnWtGnTvnNMfn6+lZqaao0ePdp66qmnoj53b0V6fg888IB1wQUXWGlpadawYcOswsJCa/PmzbEZ/jS6Oi9JnZ4Pk19/fTk/k15/P/7xj62RI0daqamp1ogRI6xrrrkmHC/Liv5zx59TAQAYKeneAwMAJAYCBgAwEgEDABiJgAEAjETAAABGImAAACMRMACAkQgYAMBIBAwAYCQCBgAwEgEDABiJgAEAjPT/ANd4+qyh5H98AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"line = LineString([(1, -1), (2, 0), (2, 1), (3, 1)])\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" line, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # line\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon x line --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- line x polygon --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "e21add97-579a-4e81-a320-c99cb80eadd6",
"metadata": {},
"source": [
"## Polygon x Polygon relationships"
]
},
{
"cell_type": "markdown",
"id": "25368188-28d6-4420-a667-3b9f044714f3",
"metadata": {},
"source": [
"### Polygon overlaps polygon"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fd74c009-7cc0-4fcd-b56a-4491727fed06",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: True\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 212101212\n",
"-- polygon 1 x polygon 0 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: True\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 212101212\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(1, 1, 3, 3)\n",
"polygon1 = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "ad70b13f-66f3-45e6-b704-0c2ac79f7245",
"metadata": {},
"source": [
"### Polygons touching at sides"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d3f742f2-3d28-48d1-902b-3e0ce75e93f1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F11212\n",
"-- polygon 1 x polygon 0 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F11212\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAEjCAYAAADgwgEsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZJklEQVR4nO3df0yV593H8c9B5aARqNbyS2l1s8Pf4I9qD00GrrTMEVP+6ZxZKnHq1gUTGXtqZFn0cU0eumyKzcqKxliyNkZrnZhYp6U4ICrGyo8UXWumNWorB7VPywHWgYHr+aPx7EE5yI3A5Tm+X8n9x7nPdZ37+83Vu+fjfe5zcBljjAAAACwJs10AAAB4uBFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGDVSNsF9Ed3d7euXbumyMhIuVwu2+UAAIB+MMaotbVVCQkJCgsLfP0jKMLItWvXlJiYaLsMAAAwAFevXtWkSZMCPh8UYSQyMlLSt81ERUVZrgYAAPSHz+dTYmKi/308kKAII7c/momKiiKMAAAQZO51iwU3sAIAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqxyFkcLCQj311FOKjIxUTEyMsrOzdf78+XvO27dvn6ZNm6aIiAjNnj1bhw8fHnDBAAAgtDgKI1VVVcrNzdWpU6dUXl6uW7du6fnnn1d7e3vAOSdPntTy5cu1atUq1dfXKzs7W9nZ2Tp79ux9Fw8AAIKfyxhjBjr5xo0biomJUVVVlb7//e/3OmbZsmVqb2/XoUOH/PuefvpppaSkqKSkpF/H8fl8io6OVktLC78zAgBAkOjv+/d9/ehZS0uLJGn8+PEBx9TU1Cg/P7/HvszMTJWVlQWc09HRoY6ODv9jn893P2X26csvv1RnZ+eQvT6Ae2tra9PYsWNtlwE8tMLDw/Xoo49aO/6Aw0h3d7fy8vL0zDPPaNasWQHHeb1excbG9tgXGxsrr9cbcE5hYaE2b9480NL67csvv9T/bNmiNsIIYM2/Ozr0ScPHmv3dGYqIGG27HOChNGasWxsK/staIBlwGMnNzdXZs2d1/PjxwaxHklRQUNDjasrt37YfbJ2dnWrr7FS852mNHTdu0F8fwL01f/6FGuo+1uNxMzVp4mTb5QAPHZ/va124Wmf1U4IBhZG1a9fq0KFDqq6u7vOv8ElSXFycmpube+xrbm5WXFxcwDlut1tut3sgpQ3I2HHj9Mhjjw3b8QD8R3vbtzfAjx0bpfGPTLBcDQAbHH2bxhijtWvX6sCBAzp27JimTJlyzzkej0cVFRU99pWXl8vj8TirFAAAhCRHV0Zyc3O1e/duHTx4UJGRkf77PqKjozV69Lef9a5YsUITJ05UYWGhJGndunVKS0vTli1blJWVpT179ujMmTPasWPHILcCAACCkaMrI2+++aZaWlqUnp6u+Ph4/7Z3717/mCtXrqipqcn/ODU1Vbt379aOHTuUnJys9957T2VlZX3e9AoAAB4ejq6M9OcnSSorK+/a9+KLL+rFF190cigAAPCQ4G/TAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsch5Hq6motXbpUCQkJcrlcKisr63N8ZWWlXC7XXZvX6x1ozQAAIIQ4DiPt7e1KTk5WcXGxo3nnz59XU1OTf4uJiXF6aAAAEIJGOp2wZMkSLVmyxPGBYmJi9MgjjzieBwAAQtuw3TOSkpKi+Ph4Pffcczpx4kSfYzs6OuTz+XpsAAAgNA15GImPj1dJSYn279+v/fv3KzExUenp6aqrqws4p7CwUNHR0f4tMTFxqMsEAACWOP6YxqmkpCQlJSX5H6empurixYsqKirS22+/3eucgoIC5efn+x/7fD4CCQAAIWrIw0hvFi5cqOPHjwd83u12y+12D2NFAADAFiu/M9LQ0KD4+HgbhwYAAA8Yx1dG2tradOHCBf/jS5cuqaGhQePHj9fjjz+ugoICffHFF/rLX/4iSdq2bZumTJmimTNn6t///rd27typY8eO6YMPPhi8LgAAQNByHEbOnDmjxYsX+x/fvrcjJydHpaWlampq0pUrV/zPd3Z26te/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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(2, 0, 4, 2)\n",
"polygon1 = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "f596cae4-50c4-4ac8-b8ad-e29df6b5a412",
"metadata": {},
"source": [
"### Polygons touch at corner"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "90f88fe4-74c7-405e-81bc-d7d0ba0ecc65",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F01212\n",
"-- polygon 1 x polygon 0 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F01212\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(2, 2, 4, 4)\n",
"polygon1 = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "ca606e8f-ea06-471e-9dc6-4a7d5cab232f",
"metadata": {},
"source": [
"### Polygon contains another polygon"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "c3ce68cd-dd90-4772-ae36-69f8e99ed078",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: True\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: True\n",
"DE-9IM: 2FF1FF212\n",
"-- polygon 1 x polygon 0 --\n",
"contains: True\n",
"covers: True\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 212FF1FF2\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(1, 1, 2, 2)\n",
"polygon1 = Polygon.from_bounds(0, 0, 3, 3)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "191118ad-f9b5-499f-8908-6de0dbc9c58f",
"metadata": {},
"source": [
"### Perfectly overlapping polygons (same polygons)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d0f3b04b-a97a-434e-b473-10090697e34a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: True\n",
"covers: True\n",
"covered_by: True\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: True\n",
"DE-9IM: 2FFF1FFF2\n",
"-- polygon 1 x polygon 0 --\n",
"contains: True\n",
"covers: True\n",
"covered_by: True\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: False\n",
"within: True\n",
"DE-9IM: 2FFF1FFF2\n"
]
},
{
"data": {
"image/png": "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/4YdCARs1fcmHTmfI0aMUGlpqd5//3299dZbam1t1cSJE3Xy5MnuaLnHae/1GQwG9ec///k6dWWu5ORklZSUaOPGjdq4caNSUlKUlZWlffv2Xe/Wbiitra1asmSJfv7zn+uuu+5qt66r3z97xLfD48aXmZmpzMzM8OOJEyfqzjvv1O9+9zstW7bsOnYG/PB/rEaMGBF+PHHiRB09elQvv/yyfv/731/Hzm4sixcv1oEDB7R9+/br2kevuOJKSEhQdHS06uvrI8br6+vldrvbnON2u23V9yYdOZ9/6aabbtK4ceN05MiRrmixx2vv9RkXF6e+fftep656lgkTJvD6/F/y8vL0wQcf6NNPP73iz0h19ftnrwiumJgYjR8/XpWVleGx1tZWVVZWRlwF/G+ZmZkR9ZK0ZcuWdut7k46cz7/U0tKizz//XMnJyV3VZo/G67Pr1dTU8PrUDz/wmJeXp/fee0+ffPKJUlNTrziny1+fnXKLhwHWrl1rOZ1Oq6yszPqv//ov65FHHrEGDhxoBQIBy7Is66GHHrKeeOKJcP1nn31m9enTx3rxxRetgwcPWoWFhdZNN91kff7559frEG4ods/nM888Y23evNk6evSotXfvXmv27NlWbGys9cUXX1yvQ7ihXLhwwdq/f7+1f/9+S5K1fPlya//+/daxY8csy7KsJ554wnrooYfC9V9++aXVr18/6/HHH7cOHjxoFRcXW9HR0VZFRcX1OoQbit3z+fLLL1vl5eXW4cOHrc8//9x69NFHraioKOvjjz++Xodww1i0aJHlcrmsqqoqq66uLrx9++234Zrufv/sNcFlWZb1r//6r9att95qxcTEWBMmTLB27twZ3jdp0iRr3rx5EfXr16+37rjjDismJsYaPXq09eGHH3Zzxzc2O+dzyZIl4dqkpCTrr//6r619+/Zdh65vTBdvx/7L7eI5nDdvnjVp0qRL5qSnp1sxMTHW0KFDrTfffLPb+75R2T2fzz//vHX77bdbsbGxVnx8vJWVlWV98skn16f5G0xb51FSxOutu98/+VkTAIBResVnXACAnoPgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABjl/wFLy7Lt9wVZWwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(0, 0, 2, 2)\n",
"polygon1 = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "8bb8a98f-343d-4603-a256-c7ee88ac0d97",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# can use `equals`\n",
"g0.equals(g1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "f9d1be1b-2682-4c2c-936a-5fbd99d3f9ed",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"-0.08 -0.08 2.16 2.16\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,2.0)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0432\" opacity=\"0.6\" d=\"M 0.0,0.0 L 0.0,2.0 L 2.0,2.0 L 2.0,1.0 L 2.0,0.0 L 0.0,0.0 z\" /></g></svg>"
],
"text/plain": [
"<POLYGON ((0 0, 0 2, 2 2, 2 1, 2 0, 0 0))>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# equals will return true if they are the same area, but different vertices\n",
"g2 = Polygon([(0, 0), (0, 2), (2, 2), (2, 1), (2, 0), (0, 0)])\n",
"g2 "
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "9f33f3af-4649-4cbf-bcd7-cf0ee0867807",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g2.equals(g0)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "1dd23a4c-2470-460d-99af-0f912e5cfda6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# if they are exactly the same\n",
"g2.equals_exact(g1, tolerance=0.1)"
]
},
{
"cell_type": "markdown",
"id": "df9b2f04-e10a-46eb-b33b-c21cfff6008d",
"metadata": {},
"source": [
"### Polygon fully spans polygon"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "0b8c74d3-0f6f-4970-9335-cf1855a02e4b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: True\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 212101212\n",
"-- polygon 1 x polygon 0 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: True\n",
"touches: False\n",
"within: False\n",
"DE-9IM: 212101212\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaUAAAGdCAYAAACy+2xuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAe0UlEQVR4nO3df1CVdf738ReY56BxwJ/8UMnctcVMBaO0Q/cktRa5TiP/uK5/BOuqu+3AjCx750jT5G3N3Ked1sjZWNFva8zWOJqZOGOmEQaOidOCcC+45azliBUH01WOkB4auO4/djy7JwG9jsD5HHw+Zs4f5+JznfP+zOn09AI8RlmWZQkAAANEh3sAAACuIUoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjHFHuAe4GT09Pfrmm2/kcrkUFRUV7nEAADZYlqXLly9r0qRJio7u/1ooIqL0zTffKCUlJdxjAABuwdmzZzVlypR+10RElFwul6R/byguLi7M0wAA7PD5fEpJSQn8v7w/ERGla9+yi4uLI0oAEKFu5scv/KIDAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYtqK0efNmzZkzJ/DJCm63Wx988EG/5+zatUszZsxQTEyMZs+erf3799/SwACA4ctWlKZMmaKXX35Z9fX1qqur02OPPaYlS5boxIkTva4/evSoli9frpUrV6qhoUE5OTnKyclRc3PzgAwPABheoizLsm7lAcaNG6dXXnlFK1euvO5ry5YtU2dnp/bt2xc49tBDDyk9PV1lZWU3/Rw+n0/x8fFqb2/ns+8AIMLY+X94yB/I2t3drV27dqmzs1Nut7vXNbW1tSoqKgo6lp2drYqKin4f2+/3y+/3B+77fL5Qx8QwcuHCBXV1dYV7DITI4XBo/Pjx4R4DhrMdpaamJrndbl29elWxsbHas2ePZs6c2etar9erxMTEoGOJiYnyer39PofH49GGDRvsjoZh7MKFC/q/GzeqgyhFrFiHQ8/9/veECf2yHaXU1FQ1Njaqvb1d7777rvLy8lRTU9NnmEJRXFwcdIV17d/iwO2rq6tLHV1dSnY/pNixY8M9DmzquHhRrbXHuNLFDdmOksPh0PTp0yVJGRkZ+tvf/qZNmzZpy5Yt161NSkpSW1tb0LG2tjYlJSX1+xxOp1NOp9PuaLgNxI4dqzETJ4Z7DACD5Jb/nlJPT0/Qz3/+m9vtVlVVVdCxysrKPn8GBQC4vdm6UiouLtaiRYt011136fLly9q+fbuqq6t18OBBSVJubq4mT54sj8cjSVqzZo0WLFigjRs3avHixdqxY4fq6uq0devWgd8JACDi2YrSuXPnlJubq9bWVsXHx2vOnDk6ePCgHn/8cUlSS0uLoqP/c/GVmZmp7du36/nnn9dzzz2ne+65RxUVFZo1a9bA7gIAMCzYitJf/vKXfr9eXV193bGlS5dq6dKltoYCANye+Ow7AIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGMNWlDwejx588EG5XC4lJCQoJydHJ0+e7Pec8vJyRUVFBd1iYmJuaWgAwPBkK0o1NTXKz8/XsWPHVFlZqe+//15PPPGEOjs7+z0vLi5Ora2tgduZM2duaWgAwPB0h53FBw4cCLpfXl6uhIQE1dfX65FHHunzvKioKCUlJYU2IQDgtnFLP1Nqb2+XJI0bN67fdR0dHZo6dapSUlK0ZMkSnThxot/1fr9fPp8v6AYAGP5CjlJPT48KCwv18MMPa9asWX2uS01N1bZt27R37169/fbb6unpUWZmpr766qs+z/F4PIqPjw/cUlJSQh0TABBBQo5Sfn6+mpubtWPHjn7Xud1u5ebmKj09XQsWLNB7772niRMnasuWLX2eU1xcrPb29sDt7NmzoY4JAIggtn6mdE1BQYH27dunw4cPa8qUKbbOHTlypObOnatTp071ucbpdMrpdIYyGgAggtm6UrIsSwUFBdqzZ48OHTqkadOm2X7C7u5uNTU1KTk52fa5AIDhzdaVUn5+vrZv3669e/fK5XLJ6/VKkuLj4zVq1ChJUm5uriZPniyPxyNJevHFF/XQQw9p+vTpunTpkl555RWdOXNGq1atGuCtAAAina0obd68WZKUlZUVdPzNN9/UL3/5S0lSS0uLoqP/cwF28eJFrV69Wl6vV2PHjlVGRoaOHj2qmTNn3trkAIBhx1aULMu64Zrq6uqg+yUlJSopKbE1FADg9sRn3wEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYtqLk8Xj04IMPyuVyKSEhQTk5OTp58uQNz9u1a5dmzJihmJgYzZ49W/v37w95YADA8GUrSjU1NcrPz9exY8dUWVmp77//Xk888YQ6Ozv7POfo0aNavny5Vq5cqYaGBuXk5CgnJ0fNzc23PDwAYHi5w87iAwcOBN0vLy9XQkKC6uvr9cgjj/R6zqZNm/Tkk0/q2WeflSS99NJLqqys1Ouvv66ysrIQxwYADEe2ovRD7e3tkqRx48b1uaa2tlZFRUVBx7Kzs1VRUdHnOX6/X36/P3Df5/PdypgBFy5cUFdX14A8FoZWW1ubvrtyRZ0dnRoRMyrc48Cmzo5OfXflitra2sI9CkLkcDg0fvz4QX+ekKPU09OjwsJCPfzww5o1a1af67xerxITE4OOJSYmyuv19nmOx+PRhg0bQh2tVxcuXNDLnj/quw7/jRfDOJ2dHfr7lyd1Pm68YuLiwj0ObLrq8+mbxma9tvHPuvPO2HCPgxCMjnVqXfH/HvQwhRyl/Px8NTc368iRIwM5jySpuLg46OrK5/MpJSXllh6zq6tL33X4NT3lfsXFjbnFCTHULrX/S2cu+pQwIUV3jhkb7nFgU6fjoq6OTdbs1P+lMfF9f2cFZvL5LunU2eND8p2mkKJUUFCgffv26fDhw5oyZUq/a5OSkq67ZG9ra1NSUlKf5zidTjmdzlBGu6G4uDEaN2bCoDw2BpfT4VSMc5RGxYwO9yiwqdt5VU6HU2Pix/H+Q79s/fadZVkqKCjQnj17dOjQIU2bNu2G57jdblVVVQUdq6yslNvttjcpAGDYs3WllJ+fr+3bt2vv3r1yuVyBnwvFx8dr1Kh///A5NzdXkydPlsfjkSStWbNGCxYs0MaNG7V48WLt2LFDdXV12rp16wBvBQAQ6WxdKW3evFnt7e3KyspScnJy4LZz587AmpaWFrW2tgbuZ2Zmavv27dq6davS0tL07rvvqqKiot9fjgAA3J5sXSlZlnXDNdXV1dcdW7p0qZYuXWrnqQAAtyE++w4AYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGsB2lw4cP66mnntKkSZMUFRWlioqKftdXV1crKirqupvX6w11ZgDAMGU7Sp2dnUpLS1Npaamt806ePKnW1tbALSEhwe5TAwCGuTvsnrBo0SItWrTI9hMlJCRozJgxts8DANw+huxnSunp6UpOTtbjjz+uTz75pN+1fr9fPp8v6AYAGP4GPUrJyckqKyvT7t27tXv3bqWkpCgrK0vHjx/v8xyPx6P4+PjALSUlZbDHBAAYwPa37+xKTU1Vampq4H5mZqa++OILlZSU6K233ur1nOLiYhUVFQXu+3w+wgQAt4FBj1Jv5s2bpyNHjvT5dafTKafTOYQTAQBMEJa/p9TY2Kjk5ORwPDUAwGC2r5Q6Ojp06tSpwP3Tp0+rsbFR48aN01133aXi4mJ9/fXX+utf/ypJeu211zRt2jTdd999unr1qt544w0dOnRIH3744cDtAgAwLNiOUl1dnR599NHA/Ws/+8nLy1N5eblaW1vV0tIS+HpXV5d+//vf6+uvv9bo0aM1Z84cffTRR0GPAQCAFEKUsrKyZFlWn18vLy8Pur927VqtXbvW9mAAgNsPn30HADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAY9iO0uHDh/XUU09p0qRJioqKUkVFxQ3Pqa6u1v333y+n06np06ervLw8hFEBAMOd7Sh1dnYqLS1NpaWlN7X+9OnTWrx4sR599FE1NjaqsLBQq1at0sGDB20PCwAY3u6we8KiRYu0aNGim15fVlamadOmaePGjZKke++9V0eOHFFJSYmys7PtPj0AYBizHSW7amtrtXDhwqBj2dnZKiws7PMcv98vv98fuO/z+QZsnouXLgzYY2HoXGr/l/xdfl31X9GIq9+FexzYdNV/Rf4uvy61/yvcoyAEPt+lIXuuQY+S1+tVYmJi0LHExET5fD5duXJFo0aNuu4cj8ejDRs2DOgcsbGxGh3r1Omv/59Ofz2gD40h0NnZoX9dbFXM+bOK6WoP9ziw6arPp39dbFXTySO6887YcI+DEIyOdcrhcAz68wx6lEJRXFysoqKiwH2fz6eUlJRbekyXy6UX1j+njo6OWx0PYdDW1qaN//M/mu5+QHETJoR7HNjkO39ep3wXVLh69XV/SEVkcDgcGj9+/KA/z6BHKSkpSW1tbUHH2traFBcX1+tVkiQ5nU45nc4Bn8Xlcsnlcg3442JojB41SnfG3imXiz9pR5ruq1c0etQoJSYmKjk5OdzjwGCD/veU3G63qqqqgo5VVlbK7XYP9lMDACKM7Sh1dHSosbFRjY2Nkv79K9+NjY1qaWmR9O9vveXm5gbWP/PMM/ryyy+1du1aff755/rzn/+sd955R7/73e8GZgcAgGHDdpTq6uo0d+5czZ07V5JUVFSkuXPn6oUXXpAktba2BgIlSdOmTdP777+vyspKpaWlaePGjXrjjTf4dXAAwHVs/0wpKytLlmX1+fXePq0hKytLDQ0Ndp8KAHCb4bPvAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYIyQolRaWqq7775bMTExmj9/vj799NM+15aXlysqKiroFhMTE/LAAIDhy3aUdu7cqaKiIq1fv17Hjx9XWlqasrOzde7cuT7PiYuLU2tra+B25syZWxoaADA82Y7Sq6++qtWrV2vFihWaOXOmysrKNHr0aG3btq3Pc6KiopSUlBS4JSYm3tLQAIDhyVaUurq6VF9fr4ULF/7nAaKjtXDhQtXW1vZ5XkdHh6ZOnaqUlBQtWbJEJ06c6Pd5/H6/fD5f0A0AMPzZitL58+fV3d193ZVOYmKivF5vr+ekpqZq27Zt2rt3r95++2319PQoMzNTX331VZ/P4/F4FB8fH7ilpKTYGRMAEKEG/bfv3G63cnNzlZ6ergULFui9997TxIkTtWXLlj7PKS4uVnt7e+B29uzZwR4TAGCAO+wsnjBhgkaMGKG2trag421tbUpKSrqpxxg5cqTmzp2rU6dO9bnG6XTK6XTaGQ0AMAzYulJyOBzKyMhQVVVV4FhPT4+qqqrkdrtv6jG6u7vV1NSk5ORke5MCAIY9W1dKklRUVKS8vDw98MADmjdvnl577TV1dnZqxYoVkqTc3FxNnjxZHo9HkvTiiy/qoYce0vTp03Xp0iW98sorOnPmjFatWjWwOwEARDzbUVq2bJm+/fZbvfDCC/J6vUpPT9eBAwcCv/zQ0tKi6Oj/XIBdvHhRq1evltfr1dixY5WRkaGjR49q5syZA7cLAMCwYDtKklRQUKCCgoJev1ZdXR10v6SkRCUlJaE8DQDgNsNn3wEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjEGUAADGIEoAAGMQJQCAMYgSAMAYIUWptLRUd999t2JiYjR//nx9+umn/a7ftWuXZsyYoZiYGM2ePVv79+8PaVgAwPBmO0o7d+5UUVGR1q9fr+PHjystLU3Z2dk6d+5cr+uPHj2q5cuXa+XKlWpoaFBOTo5ycnLU3Nx8y8MDAIYX21F69dVXtXr1aq1YsUIzZ85UWVmZRo8erW3btvW6ftOmTXryySf17LPP6t5779VLL72k+++/X6+//votDw8AGF7usLO4q6tL9fX1Ki4uDhyLjo7WwoULVVtb2+s5tbW1KioqCjqWnZ2tioqKPp/H7/fL7/cH7vt8PjtjYhhr//Z8uEdACDouXgz3CIgQtqJ0/vx5dXd3KzExMeh4YmKiPv/8817P8Xq9va73er19Po/H49GGDRvsjIZhLjY2VrEOh8797W/q/RvFMF2swyGHwxHuMWA4W1EaKsXFxUFXVz6fTykpKWGcCOHmcrn0f4qL1dHREe5RECKHw6Hx48eHewwYzlaUJkyYoBEjRqitrS3oeFtbm5KSkno9JykpydZ6SXI6nXI6nXZGw23A5XLJ5XKFewwAg8jWLzo4HA5lZGSoqqoqcKynp0dVVVVyu929nuN2u4PWS1JlZWWf6wEAty/b374rKipSXl6eHnjgAc2bN0+vvfaaOjs7tWLFCklSbm6uJk+eLI/HI0las2aNFixYoI0bN2rx4sXasWOH6urqtHXr1oHdCQAg4tmO0rJly/Ttt9/qhRdekNfrVXp6ug4cOBD4ZYaWlhZFR//nAiwzM1Pbt2/X888/r+eee0733HOPKioqNGvWrIHbBQBgWIiyLMsK9xA34vP5FB8fr/b2dsXFxYV7HACADXb+H85n3wEAjEGUAADGIEoAAGMQJQCAMYgSAMAYRAkAYAyiBAAwBlECABiDKAEAjGHkP13xQ9c+dIJ/7A8AIs+1/3ffzAcIRUSULl++LEn8m0oAEMEuX76s+Pj4ftdExGff9fT06JtvvpHL5VJUVFRIj3HtHwo8e/bssPz8PPYX2dhfZGN//bMsS5cvX9akSZOCPrC7NxFxpRQdHa0pU6YMyGPFxcUNy/9ormF/kY39RTb217cbXSFdwy86AACMQZQAAMa4baLkdDq1fv16OZ3OcI8yKNhfZGN/kY39DZyI+EUHAMDt4ba5UgIAmI8oAQCMQZQAAMYgSgAAYwybKJWWluruu+9WTEyM5s+fr08//bTf9bt27dKMGTMUExOj2bNna//+/UM0aWjs7K+8vFxRUVFBt5iYmCGc1p7Dhw/rqaee0qRJkxQVFaWKioobnlNdXa37779fTqdT06dPV3l5+aDPGSq7+6uurr7u9YuKipLX6x2agW3yeDx68MEH5XK5lJCQoJycHJ08efKG50XKezCU/UXSe3Dz5s2aM2dO4C/Gut1uffDBB/2eM5iv3bCI0s6dO1VUVKT169fr+PHjSktLU3Z2ts6dO9fr+qNHj2r58uVauXKlGhoalJOTo5ycHDU3Nw/x5DfH7v6kf//N69bW1sDtzJkzQzixPZ2dnUpLS1NpaelNrT99+rQWL16sRx99VI2NjSosLNSqVat08ODBQZ40NHb3d83JkyeDXsOEhIRBmvDW1NTUKD8/X8eOHVNlZaW+//57PfHEE+rs7OzznEh6D4ayPyly3oNTpkzRyy+/rPr6etXV1emxxx7TkiVLdOLEiV7XD/prZw0D8+bNs/Lz8wP3u7u7rUmTJlkej6fX9T//+c+txYsXBx2bP3++9Zvf/GZQ5wyV3f29+eabVnx8/BBNN7AkWXv27Ol3zdq1a6377rsv6NiyZcus7OzsQZxsYNzM/j7++GNLknXx4sUhmWmgnTt3zpJk1dTU9Lkm0t6D/+1m9hfJ70HLsqyxY8dab7zxRq9fG+zXLuKvlLq6ulRfX6+FCxcGjkVHR2vhwoWqra3t9Zza2tqg9ZKUnZ3d5/pwCmV/ktTR0aGpU6cqJSWl3z/1RKJIev1uRXp6upKTk/X444/rk08+Cfc4N629vV2SNG7cuD7XRPJreDP7kyLzPdjd3a0dO3aos7NTbre71zWD/dpFfJTOnz+v7u5uJSYmBh1PTEzs83vwXq/X1vpwCmV/qamp2rZtm/bu3au3335bPT09yszM1FdffTUUIw+6vl4/n8+nK1euhGmqgZOcnKyysjLt3r1bu3fvVkpKirKysnT8+PFwj3ZDPT09Kiws1MMPP6xZs2b1uS6S3oP/7Wb3F2nvwaamJsXGxsrpdOqZZ57Rnj17NHPmzF7XDvZrFxGfEg573G530J9yMjMzde+992rLli166aWXwjgZbkZqaqpSU1MD9zMzM/XFF1+opKREb731Vhgnu7H8/Hw1NzfryJEj4R5lUNzs/iLtPZiamqrGxka1t7fr3XffVV5enmpqavoM02CK+CulCRMmaMSIEWpraws63tbWpqSkpF7PSUpKsrU+nELZ3w+NHDlSc+fO1alTpwZjxCHX1+sXFxenUaNGhWmqwTVv3jzjX7+CggLt27dPH3/88Q3/qZlIeg9eY2d/P2T6e9DhcGj69OnKyMiQx+NRWlqaNm3a1OvawX7tIj5KDodDGRkZqqqqChzr6elRVVVVn98TdbvdQeslqbKyss/14RTK/n6ou7tbTU1NSk5OHqwxh1QkvX4DpbGx0djXz7IsFRQUaM+ePTp06JCmTZt2w3Mi6TUMZX8/FGnvwZ6eHvn9/l6/Nuiv3YD8ukSY7dixw3I6nVZ5ebn1j3/8w/r1r39tjRkzxvJ6vZZlWdbTTz9trVu3LrD+k08+se644w7rj3/8o/XZZ59Z69evt0aOHGk1NTWFawv9sru/DRs2WAcPHrS++OILq76+3vrFL35hxcTEWCdOnAjXFvp1+fJlq6GhwWpoaLAkWa+++qrV0NBgnTlzxrIsy1q3bp319NNPB9Z/+eWX1ujRo61nn33W+uyzz6zS0lJrxIgR1oEDB8K1hX7Z3V9JSYlVUVFh/fOf/7SampqsNWvWWNHR0dZHH30Uri3067e//a0VHx9vVVdXW62trYHbd999F1gTye/BUPYXSe/BdevWWTU1Ndbp06etv//979a6deusqKgo68MPP7Qsa+hfu2ERJcuyrD/96U/WXXfdZTkcDmvevHnWsWPHAl9bsGCBlZeXF7T+nXfesX7yk59YDofDuu+++6z3339/iCe2x87+CgsLA2sTExOtn/3sZ9bx48fDMPXNufYr0D+8XdtTXl6etWDBguvOSU9PtxwOh/WjH/3IevPNN4d87ptld39/+MMfrB//+MdWTEyMNW7cOCsrK8s6dOhQeIa/Cb3tTVLQaxLJ78FQ9hdJ78Ff/epX1tSpUy2Hw2FNnDjR+ulPfxoIkmUN/WvHP10BADBGxP9MCQAwfBAlAIAxiBIAwBhECQBgDKIEADAGUQIAGIMoAQCMQZQAAMYgSgAAYxAlAIAxiBIAwBhECQBgjP8Pprw58Tj9S/IAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(0, 1, 3, 2)\n",
"polygon1 = Polygon.from_bounds(1, 0, 2, 3)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "markdown",
"id": "48aa797a-b4eb-4caa-96cc-ec51bf26f67d",
"metadata": {},
"source": [
"### Polygon with hole, with another polygon in hole"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "4b7225c9-40ee-4914-9d22-fa13d5a64b14",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-- polygon 0 x polygon 1 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F112F2\n",
"-- polygon 1 x polygon 0 --\n",
"contains: False\n",
"covers: False\n",
"covered_by: False\n",
"crosses: False\n",
"disjoint: False\n",
"intersects: True\n",
"overlaps: False\n",
"touches: True\n",
"within: False\n",
"DE-9IM: FF2F1F212\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon(\n",
" [(0, 0), (0, 3), (3, 3), (3, 0), (0, 0)],\n",
" holes=[[(1, 1), (1, 2), (2, 2), (2, 1), (1, 1)]]\n",
")\n",
"polygon1 = Polygon.from_bounds(1, 1, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"print(\"-- polygon 0 x polygon 1 --\")\n",
"print(\"contains: \", g0.contains(g1))\n",
"print(\"covers: \", g0.covers(g1))\n",
"print(\"covered_by: \", g0.covered_by(g1))\n",
"print(\"crosses: \", g0.crosses(g1))\n",
"print(\"disjoint: \", g0.disjoint(g1))\n",
"print(\"intersects: \", g0.intersects(g1))\n",
"print(\"overlaps: \", g0.overlaps(g1))\n",
"print(\"touches: \", g0.touches(g1))\n",
"print(\"within: \", g0.within(g1))\n",
"print(\"DE-9IM: \", g0.relate(g1))\n",
"\n",
"print(\"-- polygon 1 x polygon 0 --\")\n",
"print(\"contains: \", g1.contains(g0))\n",
"print(\"covers: \", g1.covers(g0))\n",
"print(\"covered_by: \", g1.covered_by(g0))\n",
"print(\"crosses: \", g1.crosses(g0))\n",
"print(\"disjoint: \", g1.disjoint(g0))\n",
"print(\"intersects: \", g1.intersects(g0))\n",
"print(\"overlaps: \", g1.overlaps(g0))\n",
"print(\"touches: \", g1.touches(g0))\n",
"print(\"within: \", g1.within(g0))\n",
"print(\"DE-9IM: \", g1.relate(g0))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "abb545cc-5bab-4729-8777-93b628a13a31",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"-0.12 -0.12 3.24 3.24\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,3.0)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.06480000000000001\" opacity=\"0.6\" d=\"M 0.0,0.0 L 0.0,3.0 L 3.0,3.0 L 3.0,0.0 L 0.0,0.0 z M 1.0,1.0 L 1.0,2.0 L 2.0,2.0 L 2.0,1.0 L 1.0,1.0 z\" /></g></svg>"
],
"text/plain": [
"<POLYGON ((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Polygon(\n",
" [(0, 0), (0, 3), (3, 3), (3, 0), (0, 0)],\n",
" holes=[[(1, 1), (1, 2), (2, 2), (2, 1), (1, 1)]]\n",
")"
]
},
{
"cell_type": "markdown",
"id": "4f08c8d4-723f-4295-92f2-c1dda54061dd",
"metadata": {},
"source": [
"## DE-9IM: dimensionally extended 9-intersection model\n",
"\n",
"https://en.wikipedia.org/wiki/DE-9IM\n",
"\n",
"A model used to describe and classify the relationships between two geometries. A matrix comparing the dimensions of the intersection between the interior, boundary, and exterior of the geometries.\n",
"\n",
"`shapely.relate` will return DE-9IM matrix of two geometries."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "f6560b63-7064-4797-8084-d65719a7bf2a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'212101212'"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"polygon0 = Polygon.from_bounds(0, 0, 2, 2)\n",
"polygon1 = Polygon.from_bounds(1, 1, 3, 3)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" polygon0, polygon1\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2), alpha=0.5, edgecolor=\"black\")\n",
"\n",
"g0 = shapes_gdf.iloc[0].geometry # polygon\n",
"g1 = shapes_gdf.iloc[1].geometry # polygon\n",
"\n",
"g0.relate(g1)"
]
},
{
"cell_type": "markdown",
"id": "34d328b6-f96c-4b1f-a687-f01f58079e1e",
"metadata": {},
"source": [
"The DE-9IM matrix for the geometries above is: `212101212`. Each value in the matrix represents the dimension of the intersection. 0 for points, 1 for lines, 2 for areas. Or, broken down:\n",
"\n",
"```text\n",
"interior 0 x interior 1 : 2 (creates a polygon)\n",
"interior 0 x boundary 1 : 1 (creates a line)\n",
"interior 0 x exterior 1 : 2 (creates a polygon)\n",
"boundary 0 x interior 1 : 1 (creates a line)\n",
"boundary 0 x boundary 1 : 0 (creates a (multi)point)\n",
"boundary 0 x exterior 1 : 1 (creates a (multi)line)\n",
"exterior 0 x interior 1 : 2 (...)\n",
"exterior 0 x boundary 1 : 1\n",
"exterior 0 x exterior 1 : 2\n",
"```\n",
"\n",
"Boundary can be thought of as the next lowest dimension. For a polygon, it is the line that creates the polygon. For a line it is the two endpoints of the line. A point doesn't have a boundary (it is an empty set)."
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "d079d1cd-57e8-452f-a526-c15fdc53f391",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'F0FFFF212'"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAGdCAYAAABKG5eZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmWUlEQVR4nO3dfXBUZZr+8asTTAcc0pCBdCcaIQjCipAwKDGMLlDT0mQpimzVKsRZwRTgLotTMq0yZEoTXa2Nug6ia9aMCgRmltdCY62yUSYaKCRA8ZIacRgKmCgg6fCy0k1aTZzk/P7wR7stCXBC3p7k+6k6NfbT9/PkPqd6+uLknO44LMuyBACAIWK6ugEAAOwguAAARiG4AABGIbgAAEYhuAAARiG4AABGIbgAAEYhuAAARunT1Q20h+bmZp06dUr9+/eXw+Ho6nYAADZZlqULFy4oJSVFMTGXP6fqEcF16tQppaamdnUbAIBrdOLECd14442XrekRwdW/f39J3+1wQkJCF3cDALArFAopNTU18n5+OT0iuC7+ejAhIYHgAgCDXc3lHm7OAAAYheACABiF4AIAGIXgAgAYheACABiF4AIAGIXgAgAYheACABilR3wAGejJmpuadfjgKQX/NyxX4vUaeVuKYmL5Nyd6L1uv/qKiIt1xxx3q37+/kpKSlJOTo8OHD19x3qZNmzRq1CjFx8drzJgx2rJlS9TzlmWpoKBAycnJ6tu3r7xer44cOWJvT4AeaO+Oo3p0zio9v2SzSp4r1/NLNuvROau0d8fRrm4N6DK2gmvbtm1atGiRdu3apa1bt+rbb7/V1KlTFQ6HW52zc+dO5ebmat68eTpw4IBycnKUk5OjgwcPRmpeeOEFvfLKKyopKdHu3bt1/fXXy+fz6Ztvvmn7ngGG27vjqF595j19ebY+avzLs/V69Zn3CC/0Wg7Lsqy2Tj5z5oySkpK0bds2/e3f/m2LNbNmzVI4HNa7774bGbvzzjuVkZGhkpISWZallJQUPfroo3rsscckScFgUG63W6WlpZo9e/YV+wiFQnK5XAoGg3xXIXqE5qZmPTpn1SWh9X8lDv6RXlydx68N0SPYeR+/pld8MBiUJCUmJrZaU1VVJa/XGzXm8/lUVVUlSaqpqVEgEIiqcblcyszMjNT8UENDg0KhUNQG9CSHD566bGhJ0v+eqdfhg6c6qSOg+2jzzRnNzc1avHixfvrTn+q2225rtS4QCMjtdkeNud1uBQKByPMXx1qr+aGioiI9/fTTbW29VVnr1rb7mkBb9P/LN0q5irpH3v1AF/4U3+H9AFdSlXt/p/2sNp9xLVq0SAcPHtT69evbs5+rkp+fr2AwGNlOnDjR6T0AHemvfa/u/5pXWwf0JG161T/88MN699139dFHH13xL1V6PB7V1dVFjdXV1cnj8USevzjWWs0POZ3OyN/e4m9woSf62n2dvu0Xo9YuQFuSvu0Xo6/d13VmW0C3YCu4LMvSww8/rLffflsffvih0tLSrjgnKytLFRUVUWNbt25VVlaWJCktLU0ejyeqJhQKaffu3ZEaoNeJceh05o8k6ZLwuvj4dOaPpJgr/9E9oKexdY1r0aJFWrt2rd555x31798/cg3K5XKpb9++kqQ5c+bohhtuUFFRkSTpkUce0aRJk/Sb3/xG06dP1/r167V37169/vrrkr77a5eLFy/Ws88+qxEjRigtLU1PPvmkUlJSlJOT0467CpilfohTp6YkKGl3va77qjky/td+MTqd+SPVD3F2YXdA17EVXK+99pokafLkyVHjq1at0oMPPihJOn78uGJivj+RmzhxotauXasnnnhCv/71rzVixAiVlZVF3dCxZMkShcNhPfTQQzp//rzuuusulZeXKz6ei87o3eqHOFWfGqe+dd+qz9fN+mvf///rQc600Itd0+e4uov2+hwXdxUCQNtc612FnfY5LgAAOhvBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMArBBQAwCsEFADAKwQUAMIrt4Nq+fbtmzJihlJQUORwOlZWVXbb+wQcflMPhuGQbPXp0pOapp5665PlRo0bZ3hkAQM9nO7jC4bDS09NVXFx8VfUvv/yyamtrI9uJEyeUmJioe++9N6pu9OjRUXU7duyw2xoAoBfoY3dCdna2srOzr7re5XLJ5XJFHpeVlenLL79UXl5edCN9+sjj8dhtBwDQy3T6Na4VK1bI6/VqyJAhUeNHjhxRSkqKhg0bpp//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fW/SluMpSfX19RoyZIhSU1M1c+ZMffrpp53Rbo/E67NjZGRkKDk5Wffcc48+/vjjrm6nWwoGg5KkxMTEVms6+vXZK4Lr7Nmzampqktvtjhp3u92t/g47EAjYqu9N2nI8R44cqZUrV+qdd97R73//ezU3N2vixIk6efJkZ7Tc47T2+gyFQvr666+7qCtzJScnq6SkRJs3b9bmzZuVmpqqyZMna//+/V3dWrfS3NysxYsX66c//aluu+22Vus6+v2zR3w7PLq/rKwsZWVlRR5PnDhRf/M3f6Pf/va3euaZZ7qwM+C7f1iNHDky8njixIk6duyYXnrpJf3ud7/rws66l0WLFungwYPasWNHl/bRK864Bg0apNjYWNXV1UWN19XVyePxtDjH4/HYqu9N2nI8f+i6667TuHHjdPTo0Y5oscdr7fWZkJCgvn37dlFXPcuECRN4ff4fDz/8sN5991199NFHV/wzUh39/tkrgisuLk7jx49XRUVFZKy5uVkVFRVRZwH/V1ZWVlS9JG3durXV+t6kLcfzh5qamvTJJ58oOTm5o9rs0Xh9drzq6mpen/ruDzw+/PDDevvtt/Xhhx8qLS3tinM6/PXZLrd4GGD9+vWW0+m0SktLrT/96U/WQw89ZA0YMMAKBAKWZVnWAw88YC1dujRS//HHH1t9+vSxXnzxRevQoUNWYWGhdd1111mffPJJV+1Ct2L3eD799NPW+++/bx07dszat2+fNXv2bCs+Pt769NNPu2oXupULFy5YBw4csA4cOGBJspYtW2YdOHDA+vzzzy3LsqylS5daDzzwQKT+L3/5i9WvXz/r8ccftw4dOmQVFxdbsbGxVnl5eVftQrdi93i+9NJLVllZmXXkyBHrk08+sR555BErJibG+sMf/tBVu9BtLFy40HK5XFZlZaVVW1sb2b766qtITWe/f/aa4LIsy/qP//gP66abbrLi4uKsCRMmWLt27Yo8N2nSJGvu3LlR9Rs3brRuueUWKy4uzho9erT13nvvdXLH3Zud47l48eJIrdvttv7u7/7O2r9/fxd03T1dvB37h9vFYzh37lxr0qRJl8zJyMiw4uLirGHDhlmrVq3q9L67K7vH8/nnn7duvvlmKz4+3kpMTLQmT55sffjhh13TfDfT0nGUFPV66+z3T/6sCQDAKL3iGhcAoOcguAAARiG4AABGIbgAAEYhuAAARiG4AABGIbgAAEYhuAAARiG4AABGIbgAAEYhuAAARiG4AABG+X+BAk3HkLDdggAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"point = Point(1, 2)\n",
"polygon = Polygon.from_bounds(0, 0, 2, 2)\n",
"shapes_gdf = gpd.GeoDataFrame(geometry=[\n",
" point, polygon\n",
"])\n",
"shapes_gdf.plot(color=plot_colors(2))\n",
"\n",
"point.relate(polygon)"
]
},
{
"cell_type": "markdown",
"id": "e66cf7de-5a39-4f8b-953c-2514d69c4a50",
"metadata": {},
"source": [
"This example with a point and a polygon the DE-9IM matrix is: `F0FFFF212`. Broken down:\n",
"\n",
"```text\n",
"interior point x interior polyogn : F (creates no shape, F) (note: polygons do not contain their boundary)\n",
"interior point x boundary polygon : 0 (creates a point, point is on the line that creates the polygon)\n",
"interior point x exterior polygon : F (creates no shape, F)\n",
"boundary point x interior polygon : F (point doesn't have a boundary, F)\n",
"boundary point x boundary polygon : F (point doesn't have a boundary, F)\n",
"boundary point x exterior polygon : F (point doesn't have a boundary, F)\n",
"exterior point x interior polygon : 2 (polygon, the exterior of the point is everything that isn't (1, 1))\n",
"exterior point x boundary polygon : 1 (line)\n",
"exterior point x exterior polygon : 2 (polygon)\n",
"```\n",
"\n",
"The inverse `polygon.relate(point)` is not the same: `FF20F1FF2`. "
]
},
{
"cell_type": "markdown",
"id": "5cc62c51-de08-4db6-91e9-9a1067bd5b7d",
"metadata": {},
"source": [
"### Matching DE-9IM strings\n",
"\n",
"We know that `0`, `1`, `2` are point, line, polygon dimensions in the DE-9IM matrix. `F` is used for empty set (no dimensions). We can add `T` (must have a dimension, `0`, `1`, `2`) and `*` (wildcard, don't care what the dimension is) as ways to match DE-9IM matrices. "
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "a3b62e81-feb9-4efe-a81a-422a14e76fd6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'F0FFFF212'"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"point.relate(polygon)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "cd5508ed-359d-4ee8-8de2-98a12740ca5b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"True\n",
"True\n",
"False\n",
"False\n"
]
}
],
"source": [
"print(shapely.relate_pattern(point, polygon, \"*********\"))\n",
"print(shapely.relate_pattern(point, polygon, \"TTTTTTTTT\"))\n",
"print(shapely.relate_pattern(point, polygon, \"******212\"))\n",
"print(shapely.relate_pattern(point, polygon, \"FT*******\")) # touches\n",
"print(shapely.relate_pattern(point, polygon, \"F**T*****\")) # touches\n",
"print(shapely.relate_pattern(point, polygon, \"F***T****\")) # touches"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "40eead12-b25f-4b48-aec9-38d85636c37d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'FF0FFF212'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"polygon1 = Polygon.from_bounds(5, 5, 10, 10)\n",
"point.relate(polygon1)"
]
},
{
"cell_type": "markdown",
"id": "91d32cd0-ade8-4f11-b71f-67cee5fe05a5",
"metadata": {},
"source": [
"### Playing around with numpy enabled shapely operations"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "66635269-8616-40f3-911d-675391bbc13b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ True, True])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"polys = np.array([polygon, polygon1])\n",
"shapely.relate_pattern(point, polys, \"*********\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "25f0051b-5be0-4fb0-ae43-1b0b0389fb62",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot: >"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAW8ElEQVR4nO3df2xV9f3H8ddta28Lay+/RktHgeqICEWGVgjUzBEaCUGCW0LGVpcOk7m4EqhNVOpWSMPgUraRBiRFSQYs8kOXCHMssi+pWkLkR0vBSRy/ItFG1lYyuLcUvGLv5/vHvpRdKSpfzu37tn0+kvPHPfdwP++c4H1ybo+3PuecEwAAPSzJegAAQP9EgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgIkU6wG+LBqN6vz588rIyJDP57MeBwBwm5xzam9vV05OjpKSbn2dk3ABOn/+vHJzc63HAADcoebmZo0cOfKWzydcgDIyMiT9Z/DMzEzjaQAAtyscDis3N7fr/fxWEi5A1z92y8zMJEAA0It93Y9RuAkBAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABg4rYDtH//fs2dO1c5OTny+XzavXt3zPPOOS1btkwjRoxQenq6ioqKdObMGa/mBQD0EbcdoI6ODk2aNEkbNmzo9vk1a9Zo3bp12rhxow4fPqyBAwdq1qxZ+uyzz+54WABA33Hb3wU3e/ZszZ49u9vnnHOqqanRb37zG82bN0+S9Kc//UlZWVnavXu3FixYcGfTAgD6DE9/BnTu3Dm1tLSoqKioa18gENDUqVN18ODBbv9MJBJROByO2QAAfZ+n34bd0tIiScrKyorZn5WV1fXclwWDQVVVVXk5BpDwBq2abz0CcEuXXvhzj6xjfhdcRUWFQqFQ19bc3Gw9EgCgB3gaoOzsbElSa2trzP7W1tau577M7/d3/e4ffgcQAPQfngYoLy9P2dnZqqur69oXDod1+PBhTZs2zculAAC93G3/DOjy5cs6e/Zs1+Nz587p+PHjGjJkiEaNGqWysjL99re/1dixY5WXl6fKykrl5OTo8ccf93JuAEAvd9sBamxs1IwZM7oel5eXS5JKSkq0ZcsWPffcc+ro6NBTTz2lS5cu6eGHH9bevXuVlpbm3dQAgF7P55xz1kP8t3A4rEAgoFAoxM+D0GdxFxwS2Z3eBfdN38fN74IDAPRPBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAE54HqLOzU5WVlcrLy1N6erruuecerVixQs45r5cCAPRiKV6/YHV1tWpra7V161ZNmDBBjY2NWrhwoQKBgBYvXuz1cgCAXsrzAL377ruaN2+e5syZI0kaM2aMduzYoSNHjni9FACgF/P8I7jp06errq5Op0+fliS99957OnDggGbPnt3t8ZFIROFwOGYDAPR9nl8BLV26VOFwWOPGjVNycrI6Ozu1cuVKFRcXd3t8MBhUVVWV12MAABKc51dAr732mrZt26bt27erqalJW7du1e9//3tt3bq12+MrKioUCoW6tubmZq9HAgAkIM+vgJ599lktXbpUCxYskCRNnDhRH330kYLBoEpKSm463u/3y+/3ez0GACDBeX4FdOXKFSUlxb5scnKyotGo10sBAHoxz6+A5s6dq5UrV2rUqFGaMGGCjh07prVr1+rJJ5/0eikAQC/meYDWr1+vyspK/epXv1JbW5tycnL0y1/+UsuWLfN6KQBAL+Z5gDIyMlRTU6OamhqvXxoA0IfwXXAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmIhLgD755BM98cQTGjp0qNLT0zVx4kQ1NjbGYykAQC+V4vULXrx4UYWFhZoxY4befPNNffvb39aZM2c0ePBgr5cCAPRingeourpaubm52rx5c9e+vLw8r5cBAPRynn8E98Ybb6igoEDz58/X8OHDNXnyZG3atOmWx0ciEYXD4ZgNAND3eR6gDz/8ULW1tRo7dqz+/ve/6+mnn9bixYu1devWbo8PBoMKBAJdW25urtcjAQASkM8557x8wdTUVBUUFOjdd9/t2rd48WI1NDTo4MGDNx0fiUQUiUS6HofDYeXm5ioUCikzM9PL0YCEMWjVfOsRgFu69MKf7+jPh8NhBQKBr30f9/wKaMSIERo/fnzMvvvuu08ff/xxt8f7/X5lZmbGbACAvs/zABUWFurUqVMx+06fPq3Ro0d7vRQAoBfzPEDPPPOMDh06pFWrVuns2bPavn27Xn75ZZWWlnq9FACgF/M8QA899JB27dqlHTt2KD8/XytWrFBNTY2Ki4u9XgoA0It5/v8BSdJjjz2mxx57LB4vDQDoI/guOACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADCRYj0A0B9deuHP1iMA5rgCAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACAibgHaPXq1fL5fCorK4v3UgCAXiSuAWpoaNBLL72k+++/P57LAAB6obgF6PLlyyouLtamTZs0ePDgeC0DAOil4hag0tJSzZkzR0VFRV95XCQSUTgcjtkAAH1fSjxedOfOnWpqalJDQ8PXHhsMBlVVVRWPMQAACczzK6Dm5mYtWbJE27ZtU1pa2tceX1FRoVAo1LU1Nzd7PRIAIAH5nHPOyxfcvXu3fvjDHyo5OblrX2dnp3w+n5KSkhSJRGKe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kqKUlBTV19dr3bp1SklJUWdnp/WIPWbEiBEaP358zL777rtPH3/8sdFEtp599lktXbpUCxYs0MSJE/Wzn/1MzzzzjILBoPVopq6/X8b7vbRPBSg1NVUPPvig6urquvZFo1HV1dVp2rRphpP1POecFi1apF27dumtt95SXl6e9UhmZs6cqffff1/Hjx/v2goKClRcXKzjx48rOTnZesQeU1hYeNPt+KdPn9bo0aONJrJ15cqVm35hWnJysqLRqNFEiSEvL0/Z2dkx76XhcFiHDx/29r3Us9sZEsTOnTud3+93W7ZscR988IF76qmn3KBBg1xLS4v1aD3q6aefdoFAwL3zzjvuX//6V9d25coV69ESQn+9C+7IkSMuJSXFrVy50p05c8Zt27bNDRgwwL3yyivWo5koKSlx3/nOd9yePXvcuXPn3Ouvv+6GDRvmnnvuOevR4q69vd0dO3bMHTt2zElya9eudceOHXMfffSRc8651atXu0GDBrm//OUv7h//+IebN2+ey8vLc1evXvVshj4XIOecW79+vRs1apRLTU11U6ZMcYcOHbIeqcdJ6nbbvHmz9WgJob8GyDnn/vrXv7r8/Hzn9/vduHHj3Msvv2w9kplwOOyWLFniRo0a5dLS0tzdd9/tfv3rX7tIJGI9Wty9/fbb3b5HlJSUOOf+cyt2ZWWly8rKcn6/382cOdOdOnXK0xn4dQwAABN96mdAAIDegwABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAw8b+ozsthOeaqPAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gpd.GeoDataFrame(geometry=[point, polygon, polygon1]).plot(color=plot_colors(3))"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "e4e0fc25-0780-4c60-af9f-bd656839b31b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([False, True])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# note, this is pairwise\n",
"point1 = Point(8, 8)\n",
"points = np.array([point, point1])\n",
"gdf = gpd.GeoDataFrame(geometry=[*points, *polys])\n",
"gdf.plot(color=plot_colors(4))\n",
"\n",
"shapely.relate_pattern(points, polys, \"T*F**F***\") # within"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "69720142-5e25-4328-af7d-6af52b8dc783",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment