{ "cells": [ { "cell_type": "markdown", "id": "e55d095e", "metadata": {}, "source": [ "# Synthetic POI Generation\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "e7c495ca", "metadata": {}, "outputs": [], "source": [ "import time\n", "import matplotlib.pyplot as plt\n", "from shapely.geometry import box\n", "from nomad.city_gen import City" ] }, { "cell_type": "code", "execution_count": 2, "id": "e96465b0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "City built and street graph computed in 2.172s; buildings=106 streets=224\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\pacob\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pyogrio\\geopandas.py:662: UserWarning: 'crs' was not provided. The output dataset will not have projection information defined and may not be usable in other systems.\n", " write(\n", "C:\\Users\\pacob\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pyogrio\\geopandas.py:662: UserWarning: 'crs' was not provided. The output dataset will not have projection information defined and may not be usable in other systems.\n", " write(\n", "C:\\Users\\pacob\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pyogrio\\geopandas.py:662: UserWarning: 'crs' was not provided. The output dataset will not have projection information defined and may not be usable in other systems.\n", " write(\n", "C:\\Users\\pacob\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pyogrio\\geopandas.py:662: UserWarning: 'crs' was not provided. The output dataset will not have projection information defined and may not be usable in other systems.\n", " write(\n" ] }, { "data": { "image/png": "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qC1btmjixImaO3eu8vPzNWHCBL388su2YxkVjUbV2tqq6667rt3ynJwcffjhh5ZSda+GhgZlZWWpf//+tqMYt337duXn52vUqFF64okndOrUKduRjLrjjju0ZcsW1dXVKRaLadu2bfrss880depU29GS1tDQIEnKy8uznMScjC79kydPqrW1VYMHD263fPDgwTp+/LilVOYdOHBA119/vbKzs/Xzn/9cmzdv1ujRo23HMurvf/+7Vq5cqX/6p39SbW2tnnjiCf3iF7/QmjVrbEczJjc3V5MmTdKyZct09OhRtba2KhgM6qOPPtKxY8dsx0u5r7/+WosXL9a8efOu+a8v/d+mT5+u1157TR988IGee+457dixQzNmzFBra6vtaMa8+OKLGj16tHw+n3r37q3p06drxYoVuuuuu2xHS0pbW5sWLVqkO++8U7fccovtOMZ4bAfA1Rs1apT279+vhoYGvf766youLtaOHTsyqvjb2to0ceJEPfvss5KkCRMm6JNPPtGqVatUXFxsOZ05a9eu1cKFC1VYWKiePXvqu9/9rubNm6e9e/fajpZSLS0tevDBBxWLxbRy5UrbcYx76KGHLv//2LFjNW7cOPn9fm3fvl333HOPxWTmvPjii9q1a5e2bNmiESNGaOfOnSopKVFBQUG7R1uvFSUlJfrkk08y7lG2jL6nP2jQIPXs2VMnTpxot/zEiRMaMmSIpVTm9e7dWyNHjtStt96q5cuXa/z48frd735nO5ZRQ4cO7fBHzM0336yvvvrKUqLU8Pv92rFjh86fP68jR45o9+7damlp0Y033mg7Wsp8U/hffvmltm7dmnH38jtz4403atCgQTp8+LDtKEZcvHhRS5cu1fPPP69Zs2Zp3LhxKi0tVVFRkX7729/ajpew0tJSvfPOO9q2bZt8Pp/tOEZldOn37t1bt956qz744IPLy9ra2vTBBx9k3HPe/1NbW5uam5ttxzDqzjvv7PDWmc8++0wjRoywlCi1+vTpo6FDh+rMmTOqra3VfffdZztSSnxT+J9//rn+4z/+QwMHDrQdqVuEw2GdOnVKQ4cOtR3FiJaWFrW0tKhHj/aV0rNnT7W1tVlKlbhYLKbS0lJt3rxZf/3rX3XDDTfYjmRcxj+8X1ZWpuLiYk2cOFG33367XnjhBTU1Nemxxx6zHc2IJUuWaMaMGRo+fLgaGxtVU1Oj7du3q7a21nY0o375y1/qjjvu0LPPPqsHH3xQu3fv1urVq7V69Wrb0Yyqra1VLBbTqFGjdPjwYT355JO66aabrtnj9fz58+3uzX7xxRfav3+/8vLyNHToUM2ZM0f79u3TO++8o9bW1suvtcnLy1Pv3r1txU7YlbYzLy9PVVVVeuCBBzRkyBCFQiH96le/0siRIzVt2jSLqRNzpW0cPny4fvCDH+jJJ59UTk6ORowYoR07dui1117T888/bzF1YkpKSlRTU6M///nPys3NvXw89uvXTzk5OZKk48eP6/jx45f3xYEDB5Sbm6vhw4dfGy/4s/vmge7x4osvxoYPHx7r3bt37Pbbb4/t2rXLdiRjFi5cGBsxYkSsd+/eMa/XG7vnnntif/nLX2zHSom33347dsstt8Sys7NjN910U2z16tW2Ixm3cePG2I033hjr3bt3bMiQIbGSkpLY2bNnbcdK2jdva/rfP8XFxbEvvvii09MkxbZt22Y7ekKutJ0XLlyITZ06Neb1emO9evWKjRgxIvb444/Hjh8/bjt2Qq60jbFYLHbs2LHYo48+GisoKIhdd911sVGjRsWqq6tjbW1tdoMnIN7x+Oqrr14+T0VFxT88TzrLisVisdT/aQEAAGzL6Of0AQDA/4/SBwDAEZQ+AACOoPQBAHAEpQ8AgCMofQAAHEHpAwDgCEofAABHUPoAADiC0gcAwBGUPgAAjvj/AKDxF62ZVXFRAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Initialize city and time the build\n", "t0 = time.perf_counter()\n", "city = City(dimensions=(22, 22))\n", "# add a park\n", "city.add_building(building_type='park', door=(13, 11), geom=box(9, 9, 13, 13))\n", "city.add_building(building_type='home', door=(8, 8), blocks=[(7, 7), (7, 8)])\n", "city.add_building('home', (9, 8), blocks=[(8, 7), (9, 7)])\n", "city.add_building('home', (10, 8), blocks=[(10, 7)])\n", "city.add_building('home', (11, 8), blocks=[(11, 7)])\n", "city.add_building('home', (13, 6), blocks=[(13, 7)])\n", "city.add_building('home', (14, 6), blocks=[(14, 7)])\n", "city.add_building('home', (13, 8), blocks=[(14, 8)])\n", "city.add_building('home', (13, 9), blocks=[(14, 9)])\n", "city.add_building('home', (13, 11), blocks=[(14, 11)])\n", "city.add_building('home', (13, 12), blocks=[(14, 12)])\n", "city.add_building('home', (15, 13), blocks=[(14, 13)])\n", "city.add_building('home', (13, 13), blocks=[(13, 14), (14, 14)])\n", "city.add_building('home', (12, 13), blocks=[(12, 14)])\n", "city.add_building('home', (11, 13), blocks=[(11, 14)])\n", "city.add_building('home', (9, 13), blocks=[(9, 14)])\n", "city.add_building('home', (8, 13), blocks=[(8, 14)])\n", "city.add_building('home', (7, 15), blocks=[(7, 14)])\n", "city.add_building('home', (6, 13), blocks=[(7, 13)])\n", "city.add_building('home', (8, 12), blocks=[(7, 12)])\n", "city.add_building('home', (8, 10), blocks=[(7, 10), (7, 9)])\n", "\n", "# add workplaces\n", "city.add_building('workplace', (3, 4), blocks=[(4, 4), (4, 5)])\n", "city.add_building('workplace', (5, 3), blocks=[(5, 4), (5, 5)])\n", "city.add_building('workplace', (6, 6), geom=box(6, 4, 8, 6))\n", "city.add_building('workplace', (8, 6), geom=box(8, 4, 10, 6))\n", "city.add_building('workplace', (12, 6), geom=box(11, 5, 14, 6))\n", "city.add_building('workplace', (12, 3), geom=box(11, 4, 14, 5))\n", "city.add_building('workplace', (15, 3), geom=box(14, 4, 17, 6))\n", "city.add_building('workplace', (18, 4), geom=box(17, 4, 18, 6))\n", "city.add_building('workplace', (18, 6), geom=box(16, 6, 18, 8))\n", "city.add_building('workplace', (15, 9), geom=box(16, 8, 17, 10))\n", "city.add_building('workplace', (18, 8), geom=box(17, 8, 18, 10))\n", "city.add_building('workplace', (18, 10), geom=box(16, 10, 18, 12))\n", "city.add_building('workplace', (18, 13), geom=box(16, 13, 18, 15))\n", "city.add_building('workplace', (18, 15), geom=box(16, 15, 18, 16))\n", "city.add_building('workplace', (15, 15), geom=box(15, 16, 18, 17))\n", "city.add_building('workplace', (14, 15), blocks=[(14, 16)])\n", "city.add_building('workplace', (16, 18), geom=box(16, 17, 18, 18))\n", "city.add_building('workplace', (15, 18), geom=box(14, 17, 16, 18))\n", "city.add_building('workplace', (13, 18), geom=box(12, 16, 14, 18))\n", "city.add_building('workplace', (11, 18), geom=box(10, 17, 12, 18))\n", "city.add_building('workplace', (11, 15), geom=box(10, 16, 12, 17))\n", "city.add_building('workplace', (8, 18), geom=box(7, 16, 9, 18))\n", "city.add_building('workplace', (6, 18), geom=box(5, 17, 7, 18))\n", "city.add_building('workplace', (6, 15), geom=box(5, 16, 7, 17))\n", "city.add_building('workplace', (3, 16), blocks=[(4, 16), (4, 17)])\n", "city.add_building('workplace', (3, 13), geom=box(4, 13, 6, 16))\n", "city.add_building('workplace', (6, 12), geom=box(4, 12, 6, 13))\n", "city.add_building('workplace', (3, 10), blocks=[(4, 9), (4, 10)])\n", "city.add_building('workplace', (6, 9), blocks=[(5, 9), (5, 10)])\n", "city.add_building('workplace', (6, 8), blocks=[(4, 8), (5, 8)])\n", "city.add_building('workplace', (3, 6), geom=box(4, 6, 6, 8))\n", "\n", "# add retail places\n", "city.add_building('retail', (0, 1), geom=box(1, 1, 3, 3))\n", "city.add_building('retail', (3, 0), geom=box(3, 1, 5, 3))\n", "city.add_building('retail', (5, 0), blocks=[(5, 1)])\n", "city.add_building('retail', (5, 3), blocks=[(5, 2)])\n", "city.add_building('retail', (6, 0), geom=box(6, 1, 8, 2))\n", "city.add_building('retail', (6, 3), geom=box(6, 2, 8, 3))\n", "city.add_building('retail', (9, 3), geom=box(9, 1, 10, 3))\n", "city.add_building('retail', (12, 3), geom=box(10, 1, 13, 3))\n", "city.add_building('retail', (14, 3), geom=box(13, 1, 15, 3))\n", "city.add_building('retail', (15, 3), blocks=[(15, 2)])\n", "city.add_building('retail', (16, 3), blocks=[(16, 2)])\n", "city.add_building('retail', (15, 0), blocks=[(15, 1)])\n", "city.add_building('retail', (16, 0), blocks=[(16, 1)])\n", "city.add_building('retail', (17, 3), geom=box(17, 2, 19, 3))\n", "city.add_building('retail', (18, 0), geom=box(17, 1, 19, 2))\n", "city.add_building('retail', (19, 0), geom=box(19, 1, 21, 2))\n", "city.add_building('retail', (18, 3), geom=box(19, 2, 21, 4))\n", "city.add_building('retail', (18, 5), geom=box(19, 4, 21, 6))\n", "city.add_building('retail', (18, 7), geom=box(19, 6, 20, 8))\n", "city.add_building('retail', (21, 7), geom=box(20, 6, 21, 8))\n", "city.add_building('retail', (18, 10), geom=box(19, 9, 21, 11))\n", "city.add_building('retail', (18, 11), geom=box(19, 11, 21, 13))\n", "city.add_building('retail', (18, 13), geom=box(19, 13, 20, 15))\n", "city.add_building('retail', (21, 13), geom=box(20, 13, 21, 15))\n", "city.add_building('retail', (21, 16), geom=box(19, 15, 21, 17))\n", "city.add_building('retail', (21, 18), geom=box(19, 17, 21, 19))\n", "\n", "city.add_building('retail', (21, 19), geom=box(19, 19, 21, 20))\n", "city.add_building('retail', (20, 21), geom=box(19, 20, 21, 21))\n", "city.add_building('retail', (17, 18), geom=box(17, 19, 18, 21))\n", "city.add_building('retail', (16, 18), geom=box(16, 19, 17, 21))\n", "city.add_building('retail', (14, 18), geom=box(13, 19, 16, 20))\n", "city.add_building('retail', (15, 21), geom=box(14, 20, 16, 21))\n", "city.add_building('retail', (13, 21), geom=box(12, 20, 14, 21))\n", "city.add_building('retail', (12, 18), geom=box(12, 19, 13, 20))\n", "city.add_building('retail', (11, 18), geom=box(10, 19, 12, 21))\n", "city.add_building('retail', (9, 18), geom=box(8, 19, 10, 20))\n", "city.add_building('retail', (9, 21), geom=box(8, 20, 10, 21))\n", "city.add_building('retail', (6, 21), geom=box(5, 19, 7, 21))\n", "city.add_building('retail', (4, 21), geom=box(3, 20, 5, 21))\n", "city.add_building('retail', (4, 18), geom=box(3, 19, 5, 20))\n", "city.add_building('retail', (2, 18), geom=box(2, 19, 3, 21))\n", "city.add_building('retail', (1, 18), geom=box(1, 19, 2, 21))\n", "city.add_building('retail', (3, 17), geom=box(1, 16, 3, 18))\n", "city.add_building('retail', (3, 15), geom=box(1, 15, 3, 16))\n", "city.add_building('retail', (3, 14), geom=box(1, 14, 3, 15))\n", "city.add_building('retail', (3, 12), geom=box(1, 12, 3, 14))\n", "city.add_building('retail', (3, 11), geom=box(1, 11, 3, 12))\n", "city.add_building('retail', (3, 10), geom=box(1, 10, 3, 11))\n", "city.add_building('retail', (3, 8), geom=box(1, 8, 3, 10))\n", "city.add_building('retail', (3, 7), geom=box(1, 7, 3, 8))\n", "city.add_building('retail', (0, 5), geom=box(1, 4, 2, 7))\n", "city.add_building('retail', (3, 6), blocks=[(2, 6)])\n", "city.add_building('retail', (3, 5), blocks=[(2, 5)])\n", "city.add_building('retail', (3, 4), blocks=[(2, 4)])\n", "\n", "city.get_street_graph()\n", "elapsed = time.perf_counter() - t0\n", "print(f\"City built and street graph computed in {elapsed:.3f}s; buildings={len(city.buildings_gdf)} streets={len(city.streets_gdf)}\")\n", "\n", "# Persist as GeoPackage\n", "city.save_geopackage('garden-city.gpkg')\n", "\n", "# Plot a city\n", "fig, ax = plt.subplots(figsize=(6, 6))\n", "plt.box(on=False)\n", "city.plot_city(ax, doors=True, address=False)\n", "plt.show(block=False)\n", "plt.close(fig)" ] } ], "metadata": { "jupytext": { "formats": "ipynb,py:percent" }, "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }