{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Linking elements together\n", "\n", "As explained in the Data Structure chapter, `momepy` relies on links between different morphological elements. Each element needs ID, and each of the small-scale elements also needs to know the ID of the relevant higher-scale element. The case of block ID is explained in the previous chapter, `momepy.Blocks` generates it together with blocks gdf.\n", "\n", "## Getting the ID of the street network\n", "\n", "This notebook will explore how to link street network, both nodes and edges, to buildings and tessellation.\n", "\n", "### Edges\n", "\n", "For linking street network edges to buildings (or tessellation or other elements), `momepy` offers `momepy.get_network_id`. It simply returns a `Series` of network IDs for analysed gdf." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import momepy\n", "import geopandas as gpd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For illustration, we can use `bubenec` dataset embedded in `momepy`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/martin/Git/geopandas/geopandas/geodataframe.py:580: RuntimeWarning: Sequential read of iterator was interrupted. Resetting iterator. This can negatively impact the performance.\n", " for feature in features_lst:\n" ] } ], "source": [ "path = momepy.datasets.get_path('bubenec')\n", "buildings = gpd.read_file(path, layer='buildings')\n", "streets = gpd.read_file(path, layer='streets')\n", "tessellation = gpd.read_file(path, layer='tessellation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we have to be sure that streets segments have their unique IDs." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "streets['nID'] = momepy.unique_id(streets)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we can link it to buildings. The only argument we might want to look at is `min_size`, which should be a value such that if you build a box centred in each building centroid with edges of size `2 * min_size`, you know a priori that at least one segment is intersected with the box. You can see it as a sort of tolerance." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "hide_output" ] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ba49606d53154002a0d6e095c882aa78", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Snapping: 0%| | 0/144 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(figsize=(10, 10))\n", "buildings.plot(ax=ax, column='nID', categorical=True, cmap='tab20b')\n", "streets.plot(ax=ax)\n", "ax.set_axis_off()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: colormap does not have enough colours, that is why everything on the top-left looks the same. It is not." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Nodes\n", "\n", "The situation with nodes is slightly more complicated as you usually don't have or even need nodes. However, `momepy` includes some functions which are calculated on nodes (mostly in `graph` module). For that reason, we will pretend that we follow the usual workflow:\n", "\n", "1. Street network `GeoDataFrame` (edges only)\n", "2. networkx `Graph`\n", "3. Street network - edges and nodes as separate `GeoDataFrames`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "graph = momepy.gdf_to_nx(streets)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some [graph-based analysis](../graph/graph.rst) happens here." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "nodes, edges = momepy.nx_to_gdf(graph)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "hide_input" ] }, "outputs": [ { "data": { "image/png": "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VACIiBhnAc/lVOR9YDuISCKoABCRtNdQUpuJKQDCtrOIJIoKABERc/jPgUC97SAiiaICQEQEfM6tCgBJGyoARERMAfAm8LLtICKJogJARATGAvU5FXk6HU3ShgoAEUlrDSW1RwDZaPhf0oyOAxaRtDVy9uqCQVEWbYWD+0HL9gxKNyyYWG07l0giqAAQkbQ0cvbqAmApMLTD3ZuBa1QESDrQFICIpKsydr744/z/MgtZRBJOBYCIpKujeni/SEpRASAi6eqVHt4vklJUAIhIugpg5vw72uzcL5LyVACISFpyFvpdA2wEos6tFgBK2tAuABERkTSkEQAREZE0pAJAREQkDakAEBERSUMqAERERNKQCgAREZE0pAJAREQkDakAEBERSUMqAERERNKQCgAREZE0pAJAREQkDakAEBERSUMqAERERNKQCgAREZE0pAJAREQkDakAEBERSUMqAERERNKQCgAREZE0pAJAREQkDakAEBERSUMqAERERNKQCgAREZE0pAJAREQkDakAEBERSUMqAERERNKQCgAREZE0pAJAREQkDakAEBERSUP/H/FuIjdfxJVBAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(figsize=(10, 10))\n", "edges.plot(ax=ax, column='nID', categorical=True, cmap='tab20b')\n", "nodes.plot(ax=ax, zorder=2)\n", "ax.set_axis_off()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For attaching node ID to buildings, we will need both, nodes and edges. We have already determined which edge building belongs to, so now we only have to find out which end of the edge is the closer one. Nodes come from `momepy.nx_to_gdf` automatically with node ID:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nodeIDgeometry
00POINT (1603585.640 6464428.774)
11POINT (1603413.206 6464228.730)
22POINT (1603268.502 6464060.781)
33POINT (1603363.558 6464031.885)
44POINT (1603607.303 6464181.853)
\n", "
" ], "text/plain": [ " nodeID geometry\n", "0 0 POINT (1603585.640 6464428.774)\n", "1 1 POINT (1603413.206 6464228.730)\n", "2 2 POINT (1603268.502 6464060.781)\n", "3 3 POINT (1603363.558 6464031.885)\n", "4 4 POINT (1603607.303 6464181.853)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nodes.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same ID is now inlcuded in edges as well, denoting each end of edge. (Length of the edge is also present as it was necessary to keep as an attribute for the graph.)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometrynIDmm_lennode_startnode_end
0LINESTRING (1603585.640 6464428.774, 1603413.2...0264.10395001
1LINESTRING (1603561.740 6464494.467, 1603564.6...1470.02020208
2LINESTRING (1603585.640 6464428.774, 1603603.0...1588.92430506
3LINESTRING (1603607.303 6464181.853, 1603592.8...2199.74650314
4LINESTRING (1603363.558 6464031.885, 1603376.5...5203.01409013
\n", "
" ], "text/plain": [ " geometry nID mm_len \\\n", "0 LINESTRING (1603585.640 6464428.774, 1603413.2... 0 264.103950 \n", "1 LINESTRING (1603561.740 6464494.467, 1603564.6... 14 70.020202 \n", "2 LINESTRING (1603585.640 6464428.774, 1603603.0... 15 88.924305 \n", "3 LINESTRING (1603607.303 6464181.853, 1603592.8... 2 199.746503 \n", "4 LINESTRING (1603363.558 6464031.885, 1603376.5... 5 203.014090 \n", "\n", " node_start node_end \n", "0 0 1 \n", "1 0 8 \n", "2 0 6 \n", "3 1 4 \n", "4 1 3 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "edges.head()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6ee6dcd4d4464b20ab8d5fff51247bc3", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/144 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(figsize=(10, 10))\n", "buildings.plot(ax=ax, column='nodeID', categorical=True, cmap='tab20b')\n", "nodes.plot(ax=ax, zorder=2)\n", "edges.plot(ax=ax, zorder=1)\n", "ax.set_axis_off()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transfer IDs to tessellation\n", "All IDs are now stored in buildings gdf. We can copy them to tessellation using `merge`. First, we select columns we are interested in, then we merge them with tessellation based on the shared unique ID. Usually, we will have more columns than we have now." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['uID', 'geometry', 'nID', 'nodeID'], dtype='object')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings.columns" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
uIDgeometrynIDnodeID
01.0POLYGON ((1603578.489 6464344.527, 1603577.040...00
12.0POLYGON ((1603067.112 6464177.926, 1603054.848...339
23.0POLYGON ((1602978.618 6464156.859, 1603006.384...1011
34.0POLYGON ((1603056.595 6464093.903, 1603011.539...1011
45.0POLYGON ((1603110.459 6464114.367, 1603109.099...811
\n", "
" ], "text/plain": [ " uID geometry nID nodeID\n", "0 1.0 POLYGON ((1603578.489 6464344.527, 1603577.040... 0 0\n", "1 2.0 POLYGON ((1603067.112 6464177.926, 1603054.848... 33 9\n", "2 3.0 POLYGON ((1602978.618 6464156.859, 1603006.384... 10 11\n", "3 4.0 POLYGON ((1603056.595 6464093.903, 1603011.539... 10 11\n", "4 5.0 POLYGON ((1603110.459 6464114.367, 1603109.099... 8 11" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "columns = ['uID', 'nID', 'nodeID']\n", "tessellation = tessellation.merge(buildings[columns], on='uID')\n", "tessellation.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we should be able to link all elements together as needed for all types of morphometric analysis in `momepy`." ] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "geo_dev", "language": "python", "name": "geo_dev" }, "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.9.2" } }, "nbformat": 4, "nbformat_minor": 4 }