{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Geometric operations\n", "\n", "## Overlay analysis\n", "\n", "In this tutorial, the aim is to make an overlay analysis where we create a new layer based on geometries from a dataset that `intersect` with geometries of another layer. As our test case, we will select Polygon grid cells from `TravelTimes_to_5975375_RailwayStation_Helsinki.shp` that intersects with municipality borders of Helsinki found in `Helsinki_borders.shp`.\n", "\n", "Typical overlay operations are (source: [QGIS docs](https://docs.qgis.org/2.8/en/docs/gentle_gis_introduction/vector_spatial_analysis_buffers.html#more-spatial-analysis-tools)):\n", "![](img/overlay_operations.png)\n", "\n", "## Download data\n", "\n", "For this lesson, you should [download a data package](https://github.com/AutoGIS/data/raw/master/L4_data.zip) that includes 3 files:\n", "\n", " 1. Helsinki_borders.shp\n", " 2. Travel_times_to_5975375_RailwayStation.shp\n", " 3. Amazon_river.shp\n", " \n", "```\n", "$ cd /home/jovyan/notebooks/L4\n", "$ wget https://github.com/AutoGIS/data/raw/master/L4_data.zip\n", "$ unzip L4_data.zip\n", "```\n", "\n", "Let's first read the data and see how they look like.\n", "\n", "- Import required packages and read in the input data:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", "import matplotlib.pyplot as plt\n", "import shapely.speedups\n", "%matplotlib inline\n", "\n", "# File paths\n", "border_fp = \"data/Helsinki_borders.shp\"\n", "grid_fp = \"data/TravelTimes_to_5975375_RailwayStation.shp\"\n", "\n", "# Read files\n", "grid = gpd.read_file(grid_fp)\n", "hel = gpd.read_file(border_fp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Visualize the layers:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the layers\n", "ax = grid.plot(facecolor='gray')\n", "hel.plot(ax=ax, facecolor='None', edgecolor='blue')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the grey area is the Travel Time Matrix grid (13231 grid squares) that covers the Helsinki region, and the blue area represents the municipality of Helsinki. Our goal is to conduct an overlay analysis and select the geometries from the grid polygon layer that intersect with the Helsinki municipality polygon.\n", "\n", "When conducting overlay analysis, it is important to check that the CRS of the layers match!\n", "\n", "- Check if Helsinki polygon and the grid polygon are in the same crs:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Ensure that the CRS matches, if not raise an AssertionError\n", "assert hel.crs == grid.crs, \"CRS differs between layers!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indeed, they do. Hence, the pre-requisite to conduct spatial operations between the layers is fullfilled (also the map we plotted indicated this).\n", "\n", "- Let's do an overlay analysis and create a new layer from polygons of the grid that `intersect` with our Helsinki layer. We can use a function called `overlay()` to conduct the overlay analysis that takes as an input 1) the GeoDataFrame where the selection is taken, 2) the GeoDataFrame used for making the selection, and 3) parameter `how` that can be used to control how the overlay analysis is conducted (possible values are `'intersection'`, `'union'`, `'symmetric_difference'`, `'difference'`, and `'identity'`):" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "intersection = gpd.overlay(grid, hel, how='intersection')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Let's plot our data and see what we have:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV8AAAD8CAYAAADQSqd1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXu4VVX19z9fQFA0BOSQCiiSoHlBhKPhNcUnvGRib14wTSx9fKOky88se3t6+2W/ih9ZqemLecdC0cifmnkjUtRSbopcRRBRTogcRAVFQTjj/WPO3dnCPmdfzt577b3P+DzPetbaY88115xr7TPOXGOOOYbMDMdxHKe8dEi6AY7jOO0RV76O4zgJ4MrXcRwnAVz5Oo7jJIArX8dxnARw5es4jpMArnwdx3ESwJWv4zhOArjydRzHSYBOSTegnPTq1cv69++fdDMcx6lh5s6du87M6rKVa1fKt3///syZMyfpZjiOU8NIei2Xcm52cBzHSQBXvo7jOAngytdxHCcBXPk6juMkgCtfx3GcBHDl6ziOkwCufB3HcRLAla/jOE4CuPJ1HKdm+c1v4A9/gKampFuyI+1qhZvjOO2H22+HiROhUyd49NGgiD/5yZbLv/46zJ4Nc+fCokVw112w666la5+PfB3HqUm+/GXo3BlWrgyKdNAg+H//D7ZuDd+/8w7ccw9cdBEMGwb77gv/8R/wy1/Cgw8GhV1KfOTrOE7N8eGHcMklsHgx7LxzkG3YAJMmwY03Qq9ewRQxY0b4rl+/Het48kn40pdK10aZWelqrzDq6+vNA+s4Tu3zrW8Fc0OHDmFL2Xx33x3efTcc9+gBb78djpcsgffeg912g/32gzPPhBNPhI4d87+2pLlmVp+tnI98HcepKW64AX73u/zOOf/8YH44/XTYZZeSNGsHcrL5SuouaaqklyQtkXRUlI+TtFTSIkkTomwnSZMkLYhlf5hWz8oonydpTpq8p6RpkpbFfY8ol6TrJC2XNF/S0LRzxsTyyySNKdYNcRynelmyBL73vfzPe/PNMNItl+KF3Ee+1wKPmtlZkjoDXSWdCIwCBpvZZkm9Y9mzgS5mdqikrsBiSXeb2cr4/Ylmtm67+q8EppvZeElXxs8/AE4FBsbtM8BE4DOSegI/AeoBA+ZKetDM3s7/Fji1SFMT3HQT/POf4fXyueegf/8wA961a9Ktc4qNWZggmz8/2HvzpUMH+PrXw8Rc587Fb18msipfSd2A44GLAMxsC7BF0lhgvJltjvK18RQDdpXUCdgF2AJsyHKZUcAJ8XgS8CRB+Y4C7rRgmH4ujsD3imWnmdn62MZpwCnA3Vl77NQszzwT7HmnnQb/+Z9w//2wYEEYzXzwAcyaBXvsAb/4BXTv3nI9ZiCVrdlOgZjBnDlB6d56K7z2GvzoR4XVtWwZvPoqXHYZ/P735Xn+uZgdBgCNwO2SXpB0i6RdgUHAcZJmSpoh6YhYfirwPvAG8DpwdUpJEhTz45LmSro07RqfNLM3AOI+NYruA6xKK9cQZS3JnXbCli2waVPz57ffDjPTEyYEl6Kf/SzzeXPmBF/PBx/c8bv584O9MNN3TmWwbRs8+yxcfjkceigceSTcfXdQvMXg0UfhmmuKU1c2cjE7dAKGAuPMbKakawlmgU5AD2A4cARwr6QBwJHANmDv+P3Tkv5mZiuAY8xsdTRRTJP0kpk91cq1M/3/sVbkO1YQlPylAPvss0/23jpVwec+BwsXwt57B5eiG26AtWvhf//vZsW7YEHYf/BB83mzZ4f9H/4AX/hC8whn2zb44hfDfv/9YdSo8vXFaZ2mpmA++tOfgk132rSPf79kSfPxz39e2DVefTXsV60KvsA77wwXX1xaE0QuI98GoMHMZsbPUwnKuAG4zwKzgCagF/Blgn34o2iK+AfBNouZrY77tcD/EBQ1wJvRnEDcp0wYDUC6B15fYHUr8h0ws5vMrN7M6uvqsua0c6qA1Ovm1q1BAd90U3htzIepU+EHP4ClS8Mf95YtsGJF+G769OAf6iTLm28Gl7FRo+C44+C664I7WDmuO2hQ6W2/WUe+ZrZG0ipJB5jZUuAkYDHwCjACeFLSIKAzsI5gahgh6Y9AV8LI+JpoquhgZhvj8UjgqniZB4ExwPi4fyBNfpmkKYQJt3fN7A1JjwG/SHlFxLr+7VXh1Db/+AcceGAY9X70EdTVNTvJ779/9vNPPjns330Xvv1tOOEEGDAgyHfbLdiF7767ZdOFUx7q6sI/xi5dmp9Zv37QrVs4fuyx0lz3ySdh6NCsxdqOmWXdgCHAHGA+cD/BnNAZ+COwEHgeGBHL7gb8CVhEUNJXRPkA4MW4LQJ+lFb/HsB0YFnc94xyATcQFP0CoD7tnK8By+P21Vz6MWzYMHOqm82bzQ480CyMf0u3nXlm0j11zMy2bjW7667SPOOvf735uF8/s099ymz58ra3GZhjOeijnFzNzGwe0XSwHRdkKPsewd1se/kK4LAW6n+LMKLeXm7AN1s45zbgtlYb7tQcv/89vPRS6a8zbVowZQwcWPprtWcWLgwryjIFsDELwXBefrn07TjkkOCG2FrgnWLjgXWcqmHZsmADLDXHHx8Crfz3fwcF4JSORx4Jrn/b3+f168Pk6UMPBTNQKairC8/6kktgypTyKl5w5etUAc88AyedFFYglYOnngrbunUhGItTOh54IDzfm29uls2eHWy8N98cnsObb5bm2o2Nof5TT222I5cTV75ORWEGa9aEiZampvAH+OMfw9//Dv/6V3nbsssuIRCLUxreew9mRh+qb30Lnn8eHn4YjjkmxNYtFxdeCPPmle96KTyqmZMXTU3BJ3LrVjjggOLW/ac/wTnnFLfOtjJ9OowYkXQrapPHH4exY4NdfdmyEObxwAPDSLhnz+BOWC5OOSWYOAqJYrY9uUY185GvkxNm8PTTcPTRwZ3rkkvgqKPgU58KSzuLwZVXFqeeYjJqVAi67RSf6dODb/UHH4T9rFlhMcWKFeV/y1m7tjiKNx9c+TpZWbECvvY1+OlPwx9F377hdbyhISxOeOaZ4G/bFm688ePLhSuF3XYLzv0pp6RKbGO18sILsOeeIdBR375h69Ur7Pfeu7xt6du3vNcDcvPzrZXN/XxzZ8sWs1tvNRsxotkX8txzM/tL7r23WbduZrfcUvj1Ro4sjS9nsbYf/MBsn33MjjnGbNu24t3n9sjbb5vdeKNZx47JPtN0P98TTyxe/yimn69TuyxYEGaTV64Mo41t2+DPfw7y55/PfRZ4w4bgrnPxxfm3wSysqa9kpk8Pk0Cvvx4C75x5ZtItqj6WLAlvEXfeGWy727Yl3aJmUqmGyokr33bKpk3hVf/pp8PkBgQ/xzffDLavz34WhgyBnXZqNikccURIOLg9Q4Y0L88thIceCvbjo46C2yps2czXvhb2e+wBgweH48mTYZ99wvr/Dz8M2W5feSWUTeKPuBKZMCEsAz/iiDBHMGNGWFCx//4wenT4zQ0ZEsom9cx79YJjjw3tSCTGcy7D41rZ3OwQeOUVs09/OrxuHXts21/f9t477B9+OP+2XHVVsq+ehWydOoX9YYc1yz77WbPvfc/s6afN1q37eB/fey8sW336abMNG4ryCCuajRs/bkYaNiz5Z9aa2eFXvzL76KPi9Z8czQ4+4VbjmAUTwvjxwZfygAOCh8LKlcW/1sEH51d+27awiqxWuPrqEH3rmGPCRNKwYWHCbrfdgi/pccfB8OH5R2CrFszCooXRowvLJpEUV1wRRr9//nN5r+t+vjXMxo0h3GIhOa3y4eSTQ4Sw7343Pz/djRth5MiQ4qc9cdllIZbwyJFJt6Q4vPce/PGPYcHEHXck3ZrCSP2GP/vZ4NXTpUvhdXn24nbKRx/BLbfAE08Et7BDDy39NRcsgNWrw2TKWWeFfFi5sH59+1O8EPyGTz012EX/4z+qN2XR4sUwcSL89a9h4c1BByXdosJ5+eXQh9Wrw3bnnaW/pivfGsAszCQ/8ECYRGtqCj64UB7lm2LNGvjlL3PPozV+fGnbU8k0NYU3kqVL4dpry5s1ty189FHw9njooeZR7p57JtqkojNsWJkulIthuFa2Wphw27YtTN6sWmX2/PPBF/fgg4OfbdITGGC2++5mzz6bvR9vvWXWq1fltDuprX9/syOPNHv99dL/dtrC6tVmv/2t2b77Vucz69YtbF/+crPsO99plg8aFPYHHGDW0NC2e4VPuNUmr70G550XIvoPHRpGH4sWVU70rXffDUFwstG5czBPVEq7k+L998Oy2ssuS7olO2IWXMTOOSe41t1zT/j9VeMz27AhbOkrFD/8MMjefz+YTH7wg5A6vk+ZUvG62aHKmDUr+Cd+5jPh8777hiW+0BwhKkkOOij4czY2hnipLbHbbmFm/LzzwjLT9sqwYSHz8ic+kXRLmtmwIWRyvuMOWL48KKlhw0LQc7NQphJ+a/lw0EHQo0fw9Emx004hOP+55yYUvS6X4XGtbNVudpg926xnT7PTT0/+NS7bdsYZZitXtt6fDz4wGzw4+bZWytbUVJ7fUUu8/LLZ2LFmu+2W/L0o9tanT+Zl4aW457jZoba4667gJ7p+fdItyY133oHDDgurl8x2/P7994PP6/z55W9bpbI6Y/7t8nHVVcF7oRwZgsvNOedk9sJJ0tMkJ+UrqbukqZJekrRE0lFRPk7SUkmLJE2Isp0kTZK0IJb9YZT3k/RElC2S9O20+v9T0r8kzYvbaWnf/VDS8nidk9Pkp0TZckkVGIywOGzbFrLo3nxzcAb/8Y+DE3ul8uMfh+2MM8KijpUrgzvVQw99vNzMmdC9e/CrdAJJ21L79m1+frXGeecl3YIM5DI8BiYBl8TjzkB34ETgb0CXKO8d918GpsTjrsBKoD+wFzA0yj8BvAwcFD//J/C9DNc9iJDtuAuwHyGLcce4vULIiNw5ljkoWz+qzeywfr3ZeeeF16addkr+1a3Q7XOfM5PM7rmnuW/TpiXfrkrY6urC/tOfDpl6kyTpe1HsLbV0vn//8pp0KFZUM0ndgOOBi6Ky3gJskTQWGG9mm6N8bUqfA7tK6gTsAmwBNpjZeuCNWHajpCVAH0J6+ZYYFRX5ZuBVScuBI+N3yy1kREbSlFi2tbqqisWLQyDvTFldqxGzMLHx05+G17/OnZNuUWWx997lD+bdXjjnnMpcyJKL2WEA0AjcLukFSbdI2hUYBBwnaaakGZKOiOWnAu8TFO3rwNVR8f4bSf2Bw4H0OdPLJM2XdJukHlHWB0gPNtgQZS3Jd0DSpZLmSJrT2NiYQ3eT569/hfPPD473L74YZG0NVp4k06Y1Hy9eHLwhnn8+ufZUEgMHhoUwhUaEKxZNTXD99SFTydFHJ9uWYrHXXuHennJK0i3JTC7KtxMwFJhoZocTFOuVUd4DGA5cAdwrSYSR6TZgb4Kp4HJJA1KVSdoN+DPwHTNLWbkmAp8ChhCU9q9TxTO0x1qR7yg0u8nM6s2svq4136cKoKkpTHr86lchod+CBUm3yCk1y5aF53zIIcm2Y9WqkEPvn/8MWy3wxhvh3lZS3OB0clG+DUCDmaVGqVMJyrgBuC+aOWYBTUAvgs33UTP7KJoi/gHUQ5iMIyjeyWZ2X+oCZvammW0zsybgZppNCw1Av7S29AVWtyKvar7+9RDlq2PHYG6oFZOD0zI77xxiyQ4fnmw7evQI5qCuXROKbVsCOncOfWlLkJxSklX5mtkaYJWkVK7akwi21fuBEQCSBhEmvtYRTA0jFNiVMDJ+KY6KbwWWmNlv0q8haa+0j18EFsbjB4HRkrpI2g8YCMwCZgMDJe0nqTMwOpYtCa+9BpdfDkceCb/+dWlMAIsWBY+GTZvCdd5/P2xObfPhh2G1Yo8e2cuWkm7dwkKDTZtqJ0/dli2V3Zdc/XzHAZMlzSeYBn4B3AYMkLQQmAKMiTN9NwC7ERTobOB2M5sPHAN8haCYt3cpmxBd0+YTvCi+C2Bmi4B7Ccr+UeCbcYS8FbgMeAxYAtwby5aEiRPDaqzZs0MwlOHDi7/C5667ilufUz0kPepNkcosUWusWZN0CzKT0/JiM5tHNB1sxwUZyr4HnJ1B/gyZbbWY2VdaufbPgZ9nkD8MPNxyq4vHO++E5Yn77BM+SyFw9jnnwOc+F/xV28Lbb4eJqP/1v8LnfIOSO9XL4MFw/PFJtyJw6aXw6KPBM6Xalg9nYs89wzL8d99NuiWZ8dgOOfDoo8H0sD1Tp4a8Z7/9bVj4UKg7yx13hPpTMQ7uu6/V4k4NMX9+yF1XCey1VzCDzJuXdEuKw8svBy+SfAL8lxNfXpyF997LrHhTvPkmfPnLYbJs+fL8629qghtuKLx9TvVTSSanalm+no3Pfx6+8Q0YOzb3DNzlxke+rbB1a4hof+yx8MwzrZft0gUuuSSkhrn88txnWB9/PIw4+vZt39G92ivDhoXMz5XCeeeFrMOHHhp+/7vsEjKUVBPHHhuyTV96aWUurvg3uSyDq5Ut3+XFP/tZ7ksZv//95uOTTzZ78sns9W/b1pzl9fDDk1+O6Vv5t7o6s9//Pq+fZUn58EOzCy80q68PS8J33z35e1To9pvfJHMP8ahmbafQGKuvvgonnABnnhnS6jz9dIjudf75wQ61ZUtwKzvkEJg7t6hNdqoMKbwiVwpdusCkSSEQ0nvvwUknJd2iwvnDH0J6rUrFsxe3wl/+EmxGEJJRtpU+fcIf20UXwe23F69ep3o591yYMiXpVrTMpk0wZkxwszz99Oqanzj11LBg6cEHy2t+yDV7sY98W2GffYJyLJaC/Ne/QmLLv/+9uPU61ctxxyXdgtbp2jWkD+rQIWQnqSY2bgwj+HvvTbolmfEJt1bYd1/o3z8cr1zZ9voGDQr73r2bj19+ue31OtXLyJFJtyA7HTqECbhKXabbEv36hb+zG28MsSsGDQo+1W31yy8auRiGa2UrJJ5v9+7JTxz4VlvbBReE/Sc/mTm1TSXy7rtm3/hG8veurdv115f+XuETbsUhNfJ1nGJz6qmZU9tUIt26Nc9/VDNPPZV0C5pxs0MWjjsu/PAq6aE51c2ee4bX3zPOSLol+bFmTfNS6Gr7exg3Lux33jmEmKyEwPWufLPQoUP1/dCcymbNmrCQ4f77k25JfnTqVL1/C7/7XfPxWWeFyIFJUyUvPcmx775Jt8CpRY45Jvkwkvmyxx4h7GS1M3160i0IuPLNwv77Q31Wjz3HyZ26uuDC9c47SbckPw49NAQCqoRRY1uolLRCrnyz0KcP5LEuw3Gy0tgYIuV94QvVFzB/n30qN0Rjrhx+eNItCLjyzYJ7Ozil4plnQjCmLVuSbknuLF0K69Yl3YrawJVvFnr0qD7bnFPZ/PGPzcdPPhmWm1dqksd0/ud/4LDDqs9cUqm48s2CFMI9Ok4p2LYN7r4bvv3tsAygUnn66ZA0YPPm6vhHUQ3kpHwldZc0VdJLkpZIOirKx0laKmmRpAlRtpOkSTEn2xJJP0yr55RYfrmkK9Pk+0maKWmZpHtiUkxi4sx7YvmZkvqnnfPDKF8q6eTi3I7MVEqOLaf2OPZYOPFEWL0aJkwoTXLWtrBkSYjMd/nl0LNnaOuJJybdqhohl2VwwCTgknjcGehOSHT5N6BLlPeO+y8DU+JxV2Al0B/oCLwCDIh1vAgcFMvdC4yOxzcCY+PxN4Ab4/Fo4J54fFA8vwuwX6y3Y7Z+FLK82Mzsu99Nflmkb+1j693b7Be/MFu6tKCfapvYsMHsmmvMxo4N8akvuMCsW7fmtp1zTvL3J5/tqafKfw/NzCjW8mJJ3YDjCWnfMbMtZvYOMBYYb2abo3xtSp8Du0rqBOwCbAE2AEcCy81shZltIWQ8HhVTyo8ApsbzJwFnxuNR8TPx+5Ni+VFRwW82s1eB5bH+kuCTbk65WLsWHnsMDjgAPvvZEJHrgw9Kf92nnoKzz4bvfCdk637ooY/bpquNDh3CopBKJhezwwCgEbhd0guSbpG0KzAIOC6aA2ZIOiKWnwq8D7wBvA5cbWbrgT7AqrR6G6JsD+AdC+ng0+WknxO/fzeWb6muHZB0qaQ5kuY0FhgTb+DAgk5znIKYMSPsn3oqJFM980z4/veDj20paGqCX/0qKP0UixeH/YYNzbJKDc0IzePdf/wDHnkkxCGulMSkLZGL8u0EDAUmmtnhBMV6ZZT3AIYDVwD3xlHpkcA2YG+CSeBySQPInDbeWpFT4DkfF5rdZGb1ZlZfV1eXuYdZ2Hvvgk5znDazdm3I8/eb3wRPg6OPhsmTg3IpFr//fRjp1gJHHx0WUVRD+MtclG8D0GBmM+PnqQRl3ADcF80cs4AmoBfB5vuomX0UTRH/AOpj+X5p9fYFVgPrgO7RTJEuJ/2c+P3uwPpW6ioJbnZwKoVnn4VrrgkDgnHjYMGCttX3wQfw058Wp21OfmRVvma2Blgl6YAoOglYDNxPsNUiaRBhEm0dwdQwQoFdCSPjl4DZwMDo2dCZMIH2YDRQPwGcFesfAzwQjx+Mn4nf/z2WfxAYHb0h9gMGArMKvAdZ+ctfSlWz47TOE0+Efbp715w5YZXZ9dfDLbeEfIGTJhU2Gp4xA958syhNdfIkV5P0OGByVJorgK8SzA+3SVpImFQbY2Ym6QbgdmAhwTxwu5nNB5B0GfAYwfPhNjNbFOv/ATBF0n8BLxAn9+L+D5KWE0a8owHMbJGkewn/BLYC3zSzknkfrl9fqpodp200NQUFOmNGME2ccEJImX7wwdnPfeWV4N7mJENOytfM5hFMB9tzQYay7wFnt1DPw8DDGeQryOCtYGYftlLXz4Gft9rwIrHPPuW4iuPkzyc+EdJSQZjhnzIl5Ajcbz+48MKQ9HLnnTOfe/31le8RkCup0fsuu4T429WAZy/Ogdmzqz+Sk9M+GTkSBg8OWSgGDGiWb90a7MYDB8I//5lc+4rNF78If/pTssHSPXtxEfHlxU61smkTXH118Bm++mqYNSuYKh56qPqyEedCv37hH0s1UCMvHaUl9VrnONXCBdEguOeezd46b7wRMjrsuWdQUBdcUDsj32OOCWmZrrgixGOpBlz55kDHjiGX29NPJ90Sx8mNal6d1hrpVtIePUKEtcGD4f/8HzjttOTaVQiufHOkGpy2Hae9ccABYeXdAQdkL1tpuPLNkQMPbPajrIXXNMepRq6/Hp57LhyPGRMWiFRrXjmfcMuRIUPC3hWv4yTHM8+E5dX77gu//nX1Kl7wkW/OXHxx8CF05es4ybHrrsHMcHZG7//qwpVvHuy5Z0if/dZbSbfEcWqT1ITamjUhWzLA0KHw/PPBa+N734NPfzqx5hUVV7550Lu3K17HKQdNTc2JOt9/Hw45JIx4CwxMWJG4zTcPeveuzllVx6k2zMLfWiqo/OOP15biBVe+edGrFyxf3rx0MTUJ1717cm1ynGonPflPCglefTUEkf/5z2GnnZJrX6lw5ZsHHTp8/L+vFFxdZpUsmKXjtF8mTICvfS3pVpQOt/nmyQknhGWaAF//OoweHTK7Oo5TPHbbLQQFqmVc+ebJW28FX8Prrw+Kd/bsEEfVcZzi0a1b9YSGLBQ3O+TJXnvB+PFh1As+6nUcpzB85Jsn113XvKrmww9h48Yw8TZvXrLtcpxqoB2FD8+KK988SV/O+MYbrnQdxymMnMwOkrpLmirpJUlLJB0V5eMkLZW0SNKEKDtf0ry0rUnSEEmf2E6+TtI18ZyLJDWmfXdJ2rXHSFoWtzFp8mGSFkhaLum6mLa+rPTrF1K01EoqFsdxykeuauNaQjr4s2ISza6STgRGAYPNbLOk3gBmNhmYDCDpUOCBmAMOYEiqQklzgfvSrnGPmV2WflFJPYGfEPLHGTBX0oNm9jYwEbgUeI6QF+4U4JHcu952mppCUOpqiZzvOE7lkHXkK6kbcDwxo7CZbTGzd4CxwHgz2xzlazOcfh5wd4Y6BwK9gWzhyU8GppnZ+qhwpwGnSNoL6GZmz8ZU8ncCZ2brS7F54glXvI7jFEYuZocBQCNwu6QXJN0iaVdgEHCcpJmSZkg6IsO555JB+RKU8j328eydX5I0P5o3+kVZH2BVWpmGKOsTj7eXl5UXXwzZYU8/vdxXdhyn2slF+XYChgITzexw4H3gyijvAQwHrgDuTbe7SvoMsMnMFmaoczQfV8p/Afqb2WDgb8CkVDUZzrVW5Dsg6VJJcyTNaSxixsAPPghBnR96KGyO42RHan1rT+SifBuABjObGT9PJSjjBuA+C8wCmoBeaedtr2ABkHQY0MnM5qZkZvZWynwB3AwMS7t2v7TT+wKro7xvBvkOmNlNZlZvZvV1RYzM8dRT8O67RavOcZx2Rlbla2ZrgFWSUvG8TgIWA/cDIwAkDQI6A+vi5w7A2cCUDFXuYAeONtwUZwBL4vFjwEhJPST1AEYCj5nZG8BGScPjaPtC4IHs3S0e77wD++1Xzis6jlNL5OrtMA6YHD0dVgBfJZgfbpO0ENgCjEmz4R5PGC2vyFDXOcD2eUa/JekMYCuwHrgIwMzWS/oZMDuWu8rM1sfjscAdwC4EL4eyejqsWROiLjmO4xRCTso3uorVZ/jqghbKP0mwBWf6bkAG2Q+BH7ZQ/jbgtgzyOcAhLTa6xHz0UVJXdhynFvDYDgXStSv06JF0Kxyntvj854P3UHtYhuzKt0DM4O23k26F49QWr70Gf/0rTJ+edEtKjyvfAunSpbrTVjtOJdKnT0iUOXly0i0pPa58C0RyV7OkSU8/kykVjVN9PP44rFwJd9yRdEtKjyvfAvFgOo7jtAVXvgXStav7+TqOUzg+fiuQpib38y0W22etzZX0sm5uqA3a03P0kW+BuNnBcZy24CqkQHbeOQRTd5KjPY2Sapn2+hx95NsGVq3KXsZxHCcTrnwLZMuWpFvgOE4142aHAnnmGdhpp6RbUXu011fQWsafaWZ85Fsgf/mLB9dxHKdwXPkWQGMj9O4NhyQWU81xnGrHzQ4FUFcXzA4A114b9u0tBYpTHgr1gXYqHx/5Oo7jJICPfIuEj1DKT0v3OfUsauE51FoffPKtGR/5Oo7jJEDk6MhLAAATYUlEQVROyldSd0lTJb0kaYmko6J8nKSlkhZJmhBl50ual7Y1SRoSv3sylk991zvKu0i6R9JySTMl9U+79g+jfKmkk9Pkp0TZcklXFu+WOI7jlJ5czQ7XAo+a2VkxiWZXSScCo4DBZrY5pUjNbDIwGUDSocADMQdcivNj/rV0LgbeNrP9JY0G/hs4V9JBhBT0BwN7A3+LmZIBbgA+R0gjP1vSg2a2OL/ul4aWXq1q4RWyFOTyWlpowJ1KJJdX70rvQ6G4CaKZrCNfSd0I2YhvBTCzLWb2DiF78Hgz2xzlazOcvkOa+BYYBUyKx1OBk2JK+FHAFDPbbGavAsuBI+O23MxWmNkWQor6UTlcx3EcpyLIxewwAGgEbpf0gqRbJO0KDAKOi2aCGZKOyHDuueyofG+PJocfRwUL0AdYBWBmW4F3gT3S5ZGGKGtJ7jiOUxXkonw7AUOBiWZ2OPA+cGWU9yCkiL8CuDdNmSLpM8AmM1uYVtf5ZnYocFzcvpIqnuG6VoB8ByRdKmmOpDmNjY0t99JxikRL6Y3ySXNUzpRI2dpbzBRNnu6pmVyUbwPQYGYz4+epBGXcANxngVlAE9Ar7bzRbDfqNbN/xf1G4C6C+SB1jX4AkjoBuwPr0+WRvsDqVuQ7YGY3mVm9mdXX1dXl0F3HcZzSk1X5mtkaYJWkA6LoJGAxcD8wAiBOgnUG1sXPHYCzCbZYoqyTpF7xeCfgdCA1Kn4QGBOPzwL+bmYW5aOjN8R+wEBgFjAbGChpvzgBODqWLSmbN8OUKSGLheM4TlvI1dthHDA5KroVwFcJ5ofbJC0EtgBjosKEMEHXYGYr0uroAjwWFW9H4G/AzfG7W4E/SFpOGPGOBjCzRZLuJSj7rcA3zWwbgKTLgMdiXbeZ2aK8e58nGzfCeefBWWdBB/eQLivVtHCi0Bn9YvYtn0U/2b5Pr6uQ5+AmhszI2tGdqa+vtzlztvdyy51UQJ2PPiosjVA1KI6kyfZzrLZ7WA3KN5+6CqmzHakYACTNNbP6bOV8eXEeNDXBMcfUnoKoBmr1nhbar0wj0HIqOfdlbzv+8pwn//iH/8Acx2k7rnzzoL29PjmOUzrc7JAHdXXQ0AAdO+74XVtfH4tVXy1RrfegmP+ks9VVqgGBDzRKjyvfPOjYEfr4OjrHcYqAmx0cx3ESwEe+BVAK152WylTrq3ehVGt/i/2aXq2v/dXa7iTwka/jOE4C+Mg3DzZsgJtvzl7OcRwnG65882D9evje9/I7p62vYS2tVGrrqiOnMijHa7r/VioTNzvkgduzHMcpFq5886CpCYYOTe76Hgs1P0oVk7YWyHZfpObNKQ2ufPPk+eeTboHjOLWAK1/HcZwE8Am3PPjUp8LrWT7xT53k8Ffm/PDfbXnxka/jOE4CuPJ1HMdJADc7lIByBriu5VfrQu9dLd8Tp3bwka/jOE4C5KR8JXWXNFXSS5KWSDoqysdJWippkaQJUXa+pHlpW5OkIZK6SvprrGORpPFp9V8kqTHtnEvSvhsjaVncxqTJh0laIGm5pOuk8o138vEZTfeXLKbfpPtgfhz3S3WqjVzNDtcCj5rZWTGDcVdJJwKjgMFmtllSbwAzmwxMBpB0KPCAmc2T1BW42syeiHVMl3SqmT0Sr3GPmV2WflFJPYGfAPWAAXMlPWhmbwMTgUuB54CHgVOAR3Acx6kCso58JXUjpIK/FcDMtpjZO8BYYLyZbY7ytRlOPw+4O36/ycyeSNUBPA/0zXL5k4FpZrY+KtxpwCmS9gK6mdmzMV39ncCZWXvrOI5TIeRidhgANAK3S3pB0i2SdgUGAcdJmilphqQjMpx7LlH5piOpO/AFYHqa+EuS5kfzRr8o6wOsSivTEGV94vH28h2QdKmkOZLmNDY25tDd/CjnktVqfbXOx0xTqEnHcaqNXJRvJ2AoMNHMDgfeB66M8h7AcOAK4N50u6ukzwCbzGxhemWSOhEU8nVmtiKK/wL0N7PBwN+ASaniGdpjrch3FJrdZGb1ZlZfV1eXQ3cdx3FKTy7KtwFoMLOZ8fNUgjJuAO6zwCygCeiVdt5oMox6gZuAZWZ2TUpgZm+lzBfAzcCwtGv3Szu3L7A6yvtmkDuO41QFWZWvma0BVkk6IIpOAhYD9wMjACQNAjoD6+LnDsDZwJT0uiT9F7A78J3t5HulfTwDWBKPHwNGSuohqQcwEnjMzN4ANkoaHkfbFwIP5NrpclLMqFrVFpkr1dZ080C19SFXMnm15LI57ZdcvR3GAZOjl8IK4KsE88NtkhYCW4AxcfILwgRdQ5pZAUl9gR8BLwHPRwvF9WZ2C/AtSWcAW4H1wEUAZrZe0s+A2bGaq8xsfTweC9wB7ELwcnBPB8dxqgZZrQ1BWqG+vt7mzJlT8PlvvAGPPAIXXQQdtntnaGkUU6rbWw2jpkxJQFvKzJHp+2xUwz3IRjv682s3SJprZvXZyvkKtzxYsgQuvhg6dize62M+r6PV9rqaqa0tmSBq0RSRC9X2TJ3i4co3Dz76KOkWOI5TK7jyzYMVK2D48PzOKXTCxSdnHKe2ceWbB48/Ds89l3QrHMepBVz55ogZPPNM0q1wHKdWcOWbI0uXwpYt0K1b0i2pPEq1fLgY7ammiTw3MbUvPJh6jjz9NGzYkHQrHMepFXzkmyONjXDEEWFzHMdpK77Ioo2U8xUx2wKFpEjqJ5TPwpZKul+50I7+LGsOX2ThOI5TwbjydRzHSQCfcHPaLZVmxnFTQ/vCR76O4zgJ4CNfp820FLWs1ORzrWxlK20U7NQ+PvJ1HMdJAFe+juM4CeBmBycvMgVIrwXy6U9b/Yh9Ys0BH/k6juMkQk7KV1J3SVMlvSRpiaSjonycpKWSFkmaEGXnS5qXtjVJGhK/GyZpgaTlkq5LpZqX1FPSNEnL4r5HlCuWWy5pvqShaW0aE8svkzSm2DfGcRynlOQ68r0WeNTMDgQOA5ZIOhEYBQw2s4OBqwHMbLKZDTGzIcBXgJVmNi/WMxG4FBgYt1Oi/EpgupkNBKbHzwCnppW9NJ6PpJ7AT4DPAEcCP0kp7HKTKWpWpqhaxX7VLGadLbW3tT6Uo4+lptAoYpkC3dfC/XDKS1blK6kbIRvxrQBmtsXM3iFkDx5vZpujfG2G088D7o717AV0M7NnY5bjO4EzY7lRwKR4PGk7+Z0WeA7oHus5GZhmZuvN7G1gGs2K3HEcp+LJZeQ7AGgEbpf0gqRbJO0KDAKOkzRT0gxJmeJ9nUtUvkAfoCHtu4YoA/ikmb0BEPe9085ZleGcluQ7IOlSSXMkzWlsbMyhu4WRy2innHFsK4FsKZRqKXZtLn2rpGfjJE8uyrcTMBSYaGaHA+8TzAKdgB7AcOAK4N6UDRdA0meATWa2MCXKUHe2n2JL5+Rcl5ndZGb1ZlZfV1eX5XKO4zjlIRfl2wA0mNnM+HkqQRk3APdFk8AsoAnolXbeaJpHval6+qZ97gusjsdvRnNCyjyxNu2cfhnOaUnuOI5TFWRVvma2Blgl6YAoOglYDNwPjACQNAjoDKyLnzsAZwNT0up5A9goaXgcIV8IPBC/fhBIeSyM2U5+YfR6GA68G+t5DBgpqUecaBsZZRVNIa/Z2UwJhZoaKslEUQ5zRK2aO5zqJddFFuOAyZI6AyuArxLMD7dJWghsAcZYc2T24wmj5RXb1TMWuAPYBXgkbgDjCWaLi4HXCYob4GHgNGA5sCleFzNbL+lnwOxY7iozW59jXxzHcRLHM1mUkUJGW4U+nmzXKsdjb+vosphtrISRbjv6U2vX5JrJwpcX1yj+h155pP4B+LNxwJcXO47jJIIrX8dxnARws0MZaW+vm0lHQKsEO6/jtISPfB3HcRLAR75OycknRU8x3w5aqquSvDCc9ouPfB3HcRLAla/jOE4CuNnBKStJZQku5rWSytbs1BY+8nUcx0kAV76O4zgJ4MrXcdqAR0hzCsWVr+M4TgL4hJuTGLUwWVULfXCSwUe+juM4CeDK13EcJwHc7OC0W9xk4CSJj3wdx3ESICflK6m7pKmSXpK0RNJRUT5O0lJJiyRNSCs/WNKzUb5A0s6SPiFpXtq2TtI1sfxFkhrTvrskra4xkpbFbUyafFise7mk69LT1juO41Q6uZodrgUeNbOzYhLNrpJOBEYBg81ss6TeAJI6AX8EvmJmL0raA/jIzD4EhqQqlDQXuC/tGveY2WXpF5XUE/gJUA8YMFfSg2b2NjARuBR4jpBo8xSaE3I6zsdwE4NTaWQd+UrqRshGfCuAmW0xs3cImYjHm9nmKF8bTxkJzDezF6P8LTPbtl2dA4HewNNZLn8yMM3M1keFOw04RdJeQDczezZmTL4TODOnHjuO41QAuZgdBgCNwO2SXpB0i6RdgUHAcZJmSpoh6YhYfhBgkh6T9Lyk72eo8zzCSDd9PPIlSfOjeaNflPUBVqWVaYiyPvF4e7njOE5VkIvy7QQMBSaa2eHA+8CVUd4DGA5cAdwb7a6dgGOB8+P+i5JO2q7O0cDdaZ//AvQ3s8HA34BJUZ7JjmutyHdA0qWS5kia09jYmK2vjuM4ZSEX5dsANJjZzPh5KkEZNwD3WWAW0AT0ivIZZrbOzDYR7LFDU5VJOgzoZGZzU7JomtgcP94MDEu7dmoUDNAXWB3lfTPId8DMbjKzejOrr6ury6G7juM4pSer8jWzNcAqSQdE0UnAYuB+YASApEFAZ2Ad8BgwWFLXOPn22Vg+xXl8fNRLtOGmOANYEo8fA0ZK6iGpB8Ge/JiZvQFslDQ8jrYvBB7IvduO4zjJkqu3wzhgcvR0WAF8lWB+uE3SQmALMCbacN+W9BtgNsEU8LCZ/TWtrnOA07ar/1uSzgC2AuuBiwDMbL2kn8W6AK4ys/XxeCxwB7ALwcvBPR0cx6kaZO3IB6e+vt7mzJmTdDMcx6lhJM01s/ps5XyFm+M4TgK48nUcx0mAdmV2kNQIvJbnab0IE4m1Rq32C2q3b96v6mBfM8vqWtWulG8hSJqTi/2m2qjVfkHt9s37VVu42cFxHCcBXPk6juMkgCvf7NyUdANKRK32C2q3b96vGsJtvo7jOAngI1/HcZwEqFnlG7NnzJL0Ysyo8dMoPymGupwn6RlJ+0d5F0n3xMwYMyX1T6vrh1G+VNLJafJTomy5pCvT5PvFOpbFOjsn2K+iZQmR1FPStFh+Woy3Uep+jYj9WihpUowXggLXxTbOl5QevKli+lVg306Q9G7aM/u/aXXl9Ztr7XddxP51VAg3+1Chbamkv7GyYWY1uRHCTu4Wj3cCZhLCX74MfDrKvwHckXZ8YzweTYg3DHAQ8CLQBdgPeAXoGLdXCPGOO8cyB8Vz7gVGx+MbgbEJ9usi4PoM9fQkxOnoSQgNugLoEb+bBRwVr/UIcGqUTwCujMdXAv9d4n4dTYjnPCjKrwIujsenxbYp9n9mJfarwL6dADyUoZ68f3Mt/a6L3L//AO5KtTnftlBhf2Pl2mp25GuB9+LHneJmcesW5bvTHIpyFM1xhKcCJ8WR0ShgipltNrNXgeXAkXFbbmYrzGwLMAUYFc8ZEesg1lm0LBsF9KslCskSkn6PytGvbcBmM3s5yqcBX0pry53xvOeA7rHtFdWvAvvWEoX85lr6XRcFSX2BzwO3xM+FtKWi/sbKRc0qX/j369A8YC3hD3ImcAnwsKQG4CvA+Fj831kzzGwr8C6wB61n08gk3wN4J9aRLk+qX1C8LCGftBDOk7jvXcp+EUaqO0lKOeCfRXN853yfS2L9grz7BnBUNFM8IungKCvkN9fS77pYXAN8nxDPmwLbUnF/Y+WgppWvmW0zsyGEYOtHSjoE+C5wmpn1BW4HfhOL55s1o81ZNgolz36VLEtIsdm+X8DBhNfT30qaBWwkhB2llXZWXL8g7749T1iiehjwO0LsbCisbyXrt6TTgbWWlhihwLZU1bMsFjWtfFNYSPj5JHAqcJg1Z+W4h2B7g7SsGXHiY3dCbOHWsmlkkq8jvAJ32k5edHLplxU3S8ib8fU9FQB/LSUgrV+nRDPBcWZ2JPAUsCyH9ldkvyC3vpnZhpSZwsweJoyQU1li8v3NtfS7LgbHAGdIWkkwCYwgjITzbUvF/o2VlKSNzqXagDqgezzehZAp+XTCg0tNclwM/Dkef5OPTwbcG48P5uOTASsIEwGd4vF+NE8GHBzP+RMfnwz4RoL92ivt3C8Cz8XjnsCrhEmpHvG4Z/xuNmESKzUxdVqU/4qPT0xNKEO/ekdZF2A6MCJ+/jwfn3CbVYn9KrBve9Lsg38k8Hpsc96/OVr4XZfg7+0Emifc8moLFfY3Vq4t8QaUrGMwGHgBmA8sBP5vlH8RWBAf5JPAgCjfOT7Q5QR73IC0un5EmHVdSpwhj/LTCF4GrwA/SpMPiHUsj3V2SbBfvwQWRfkTwIFpdX0ttnE58NU0eX2s+xXg+jRFsAdBSSyL+55l6NevCGmllgLfSSsv4IbYxgVAfSX2q8C+XZb2zJ4Dji70N9fa77rIfTyBZuWbd1uooL+xcm2+ws1xHCcB2oXN13Ecp9Jw5es4jpMArnwdx3ESwJWv4zhOArjydRzHSQBXvo7jOAngytdxHCcBXPk6juMkwP8HLjT2u30ku0YAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "intersection.plot(color=\"b\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a result, we now have only those grid cells that intersect with the Helsinki borders. As we can see **the grid cells are clipped based on the boundary.**\n", "\n", "- Whatabout the data attributes? Let's see what we have:\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " car_m_d car_m_t car_r_d car_r_t from_id pt_m_d pt_m_t pt_m_tt \\\n", "0 29476 41 29483 46 5876274 29990 76 95 \n", "1 29456 41 29462 46 5876275 29866 74 95 \n", "2 36772 50 36778 56 5876278 33541 116 137 \n", "3 36898 49 36904 56 5876279 33720 119 141 \n", "4 29411 40 29418 44 5878128 29944 75 95 \n", "\n", " pt_r_d pt_r_t pt_r_tt to_id walk_d walk_t GML_ID NAMEFIN \\\n", "0 24984 77 99 5975375 25532 365 27517366 Helsinki \n", "1 24860 75 93 5975375 25408 363 27517366 Helsinki \n", "2 44265 130 146 5975375 31110 444 27517366 Helsinki \n", "3 44444 132 155 5975375 31289 447 27517366 Helsinki \n", "4 24938 76 99 5975375 25486 364 27517366 Helsinki \n", "\n", " NAMESWE NATCODE geometry \n", "0 Helsingfors 091 POLYGON ((402250.0001322526 6685750.000039577,... \n", "1 Helsingfors 091 POLYGON ((402367.8898583531 6685750.000039573,... \n", "2 Helsingfors 091 POLYGON ((403250.000132058 6685750.000039549, ... \n", "3 Helsingfors 091 POLYGON ((403456.4840652301 6685750.000039542,... \n", "4 Helsingfors 091 POLYGON ((402000.0001323065 6685500.000039622,... \n" ] } ], "source": [ "print(intersection.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, due to the overlay analysis, the dataset contains the attributes from both input layers.\n", "\n", "- Let's save our result grid as a GeoJSON file that is commonly used file format nowadays for storing spatial data.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Output filepath\n", "outfp = \"data/TravelTimes_to_5975375_RailwayStation_Helsinki.geojson\"\n", "\n", "# Use GeoJSON driver\n", "intersection.to_file(outfp, driver=\"GeoJSON\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are many more examples for different types of overlay analysis in [Geopandas documentation](http://geopandas.org/set_operations.html) where you can go and learn more." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aggregating data\n", "\n", "Data aggregation refers to a process where we combine data into groups. When doing spatial data aggregation, we merge the geometries together into coarser units (based on some attribute), and can also calculate summary statistics for these combined geometries from the original, more detailed values. For example, suppose that we are interested in studying continents, but we only have country-level data like the country dataset. If we aggregate the data by continent, we would convert the country-level data into a continent-level dataset.\n", "\n", "In this tutorial, we will aggregate our travel time data by car travel times (column `car_r_t`), i.e. the grid cells that have the same travel time to Railway Station will be merged together.\n", "\n", "- For doing the aggregation we will use a function called `dissolve()` that takes as input the column that will be used for conducting the aggregation:\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " geometry car_m_d car_m_t \\\n", "car_r_t \n", "-1 (POLYGON ((388000.0001354803 6668750.0000429, ... -1 -1 \n", " 0 POLYGON ((386000.0001357812 6672000.000042388,... 0 0 \n", " 7 POLYGON ((386250.0001357396 6671750.000042424,... 1051 7 \n", " 8 (POLYGON ((386250.0001357467 6671500.000042468... 1286 8 \n", " 9 (POLYGON ((387000.0001355996 6671500.000042449... 1871 9 \n", "\n", " car_r_d from_id pt_m_d pt_m_t pt_m_tt pt_r_d pt_r_t pt_r_tt \\\n", "car_r_t \n", "-1 -1 5913094 -1 -1 -1 -1 -1 -1 \n", " 0 0 5975375 0 0 0 0 0 0 \n", " 7 1051 5973739 617 5 6 617 5 6 \n", " 8 1286 5973736 706 10 10 706 10 10 \n", " 9 1871 5970457 1384 11 13 1394 11 12 \n", "\n", " to_id walk_d walk_t GML_ID NAMEFIN NAMESWE NATCODE \n", "car_r_t \n", "-1 -1 -1 -1 27517366 Helsinki Helsingfors 091 \n", " 0 5975375 0 0 27517366 Helsinki Helsingfors 091 \n", " 7 5975375 448 6 27517366 Helsinki Helsingfors 091 \n", " 8 5975375 706 10 27517366 Helsinki Helsingfors 091 \n", " 9 5975375 1249 18 27517366 Helsinki Helsingfors 091 \n" ] } ], "source": [ "# Conduct the aggregation\n", "dissolved = intersection.dissolve(by=\"car_r_t\")\n", "\n", "# What did we get\n", "print(dissolved.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Let's compare the number of cells in the layers before and after the aggregation:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Rows in original intersection GeoDataFrame: 3826\n", "Rows in dissolved layer: 51\n" ] } ], "source": [ "print('Rows in original intersection GeoDataFrame:', len(intersection))\n", "print('Rows in dissolved layer:', len(dissolved))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indeed the number of rows in our data has decreased and the Polygons were merged together.\n", "\n", "What actually happened here? Let's take a closer look. \n", "\n", "- Let's see what columns we have now in our GeoDataFrame:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['geometry', 'car_m_d', 'car_m_t', 'car_r_d', 'from_id', 'pt_m_d',\n", " 'pt_m_t', 'pt_m_tt', 'pt_r_d', 'pt_r_t', 'pt_r_tt', 'to_id', 'walk_d',\n", " 'walk_t', 'GML_ID', 'NAMEFIN', 'NAMESWE', 'NATCODE'],\n", " dtype='object')\n" ] } ], "source": [ "print(dissolved.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, the column that we used for conducting the aggregation (`car_r_t`) can not be found from the columns list anymore. What happened to it?\n", "\n", "- Let's take a look at the indices of our GeoDataFrame:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Int64Index([-1, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,\n", " 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n", " 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,\n", " 56],\n", " dtype='int64', name='car_r_t')\n" ] } ], "source": [ "print(dissolved.index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aha! Well now we understand where our column went. It is now used as index in our `dissolved` GeoDataFrame. \n", "\n", "- Now, we can for example select only such geometries from the layer that are for example exactly 15 minutes away from the Helsinki Railway Station:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "geometry (POLYGON ((388250.0001354316 6668750.000042891...\n", "car_m_d 12035\n", "car_m_t 18\n", "car_r_d 11997\n", "from_id 5903886\n", "pt_m_d 11568\n", "pt_m_t 30\n", "pt_m_tt 36\n", "pt_r_d 11568\n", "pt_r_t 34\n", "pt_r_tt 37\n", "to_id 5975375\n", "walk_d 11638\n", "walk_t 166\n", "GML_ID 27517366\n", "NAMEFIN Helsinki\n", "NAMESWE Helsingfors\n", "NATCODE 091\n", "Name: 20, dtype: object" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Select only geometries that are within 15 minutes away\n", "dissolved.iloc[15]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# See the data type\n", "print(type(dissolved.iloc[15]))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "geometry (POLYGON ((388250.0001354316 6668750.000042891...\n", "car_m_d 12035\n", "car_m_t 18\n", "car_r_d 11997\n", "from_id 5903886\n", "Name: 20, dtype: object\n" ] } ], "source": [ "# See the data\n", "print(dissolved.iloc[15].head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, as a result, we have now a Pandas `Series` object containing basically one row from our original aggregated GeoDataFrame.\n", "\n", "Let's also visualize those 15 minute grid cells.\n", "\n", "- First, we need to convert the selected row back to a GeoDataFrame:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Create a GeoDataFrame\n", "selection = gpd.GeoDataFrame([dissolved.iloc[15]], crs=dissolved.crs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Plot the selection on top of the entire grid:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot all the grid cells, and the grid cells that are 15 minutes a way from the Railway Station\n", "ax = dissolved.plot(facecolor='gray')\n", "selection.plot(ax=ax, facecolor='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simplifying geometries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sometimes it might be useful to be able to simplify geometries. This could be something to consider for example when you have very detailed spatial features that cover the whole world. If you make a map that covers the whole world, it is unnecessary to have really detailed geometries because it is simply impossible to see those small details from your map. Furthermore, it takes a long time to actually render a large quantity of features into a map. Here, we will see how it is possible to simplify geometric features in Python.\n", "\n", "As an example we will use data representing the Amazon river in South America, and simplify it's geometries.\n", "\n", "- Let's first read the data and see how the river looks like:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'ellps': 'GRS80', 'lat_ts': -2, 'y_0': 10000000, 'units': 'm', 'x_0': 5000000, 'proj': 'merc', 'no_defs': True, 'lon_0': -43}\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import geopandas as gpd\n", "\n", "# File path\n", "fp = \"data/Amazon_river.shp\"\n", "data = gpd.read_file(fp)\n", "\n", "# Print crs\n", "print(data.crs)\n", "\n", "# Plot the river\n", "data.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The LineString that is presented here is quite detailed, so let's see how we can generalize them a bit. As we can see from the coordinate reference system, the data is projected in a metric system using [Mercator projection based on SIRGAS datum](http://spatialreference.org/ref/sr-org/7868/). \n", "\n", "- Generalization can be done easily by using a Shapely function called `.simplify()`. The `tolerance` parameter can be used to adjusts how much geometries should be generalized. **The tolerance value is tied to the coordinate system of the geometries**. Hence, the value we pass here is 20 000 **meters** (20 kilometers).\n", "\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Generalize geometry\n", "data['geom_gen'] = data.simplify(tolerance=20000)\n", "\n", "# Set geometry to be our new simlified geometry\n", "data = data.set_geometry('geom_gen')\n", "\n", "# Plot \n", "data.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nice! As a result, now we have simplified our LineString quite significantly as we can see from the map." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.6" } }, "nbformat": 4, "nbformat_minor": 4 }