main
anitagraser 2023-10-07 15:00:27 +02:00
rodzic f2c7bdea96
commit 5b0ec40bda
2 zmienionych plików z 126 dodań i 1 usunięć

Wyświetl plik

@ -0,0 +1,125 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "9f6a6099-ce19-4c11-9dd3-191a8aab35d5",
"metadata": {},
"outputs": [],
"source": [
"from os.path import exists\n",
"from urllib.request import urlretrieve\n",
"import geopandas as gpd\n",
"import pandas as pd\n",
"import hvplot.pandas\n",
"\n",
"from holoviews import opts\n",
"opts.defaults(opts.Overlay(active_tools=['wheel_zoom'], frame_width=500, frame_height=400))\n",
"\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"def get_gdf_from_wfs(layer):\n",
" \"\"\"\n",
" Get geopandas.GeoDataFrame from data.wien.gv.at WFS service based on layer name\n",
" \n",
" Parameters\n",
" ----------\n",
" layer : string\n",
" WFS layer name \n",
" \"\"\"\n",
" file = f'{layer}.json'\n",
" url = f\"https://data.wien.gv.at/daten/geo?service=WFS&request=GetFeature&version=1.1.0&typeName=ogdwien:{layer}&srsName=EPSG:4326&outputFormat=json\"\n",
" if not exists(file):\n",
" try:\n",
" urlretrieve(url, file)\n",
" except:\n",
" from pyodide.http import open_url\n",
" url_contents = open_url(url)\n",
" file = url_contents.read()\n",
" return gpd.read_file(file)\n",
"\n",
"def plot_with_buffer(gdf, buffer_size, *args, **kwargs):\n",
" \"\"\"\n",
" Convenience function for plotting a GeoPandas point GeoDataFrame using point markers plus buffer polygons\n",
" \n",
" Parameters\n",
" ----------\n",
" gdf : geopandas.GeoDataFrame\n",
" point GeoDataFrame to plot\n",
" buffer_size : numeric\n",
" size of the buffer in meters (measured in EPSG:31287)\n",
" \"\"\"\n",
" buffered = gdf.to_crs('epsg:31287').buffer(buffer_size)\n",
" buffered = gdf.copy().set_geometry(buffered).to_crs('epsg:4326')\n",
" \n",
" plot = ( buffered.hvplot(geo=True, tiles='OSM', alpha=0.5, line_width=0, *args, **kwargs) * \n",
" gdf.hvplot(geo=True, hover_cols='all') \n",
" ).opts(active_tools=['wheel_zoom'])\n",
" \n",
" #plot = buffered.explore(height=500)\n",
" #plot = gdf.explore(m=plot)\n",
" \n",
" return plot\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ae0d7813-1f97-467c-8590-8dcad78a843a",
"metadata": {},
"outputs": [],
"source": [
"import panel as pn\n",
"\n",
"pn.extension(sizing_mode=\"stretch_width\", template=\"fast\")\n",
"pn.state.template.param.update(site=\"Panel in the Browser\", title=\"Data.Wien.gv.at Viewer\")\n",
"\n",
"wfs_layer = pn.widgets.TextInput(name=\"WFS Layer (e.g. RADGRAETZELOGD, SCOOTERABSTELLOGD, ...): \", \n",
" value=\"RADGRAETZELOGD\")\n",
"buffer_size = pn.widgets.IntSlider(start=100, end=1000, name=\"Buffer size (meters)\")\n",
"\n",
"def pipeline(wfs_layer, buffer_size):\n",
" gdf = get_gdf_from_wfs(wfs_layer)\n",
" return plot_with_buffer(gdf, buffer_size)\n",
"\n",
"pn.Column(\n",
" \"For a full list of WFS layers, see https://www.data.gv.at/auftritte/?organisation=stadt-wien&formatFilter%5B0%5D=WFS\",\n",
" wfs_layer,\n",
" \"Move the slider below to change the buffer size\",\n",
" buffer_size,\n",
" pn.bind(pipeline, wfs_layer, buffer_size),\n",
").servable()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a328dd5a-6961-43c1-9f02-9827de3e03a6",
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

Wyświetl plik

@ -3,7 +3,7 @@ channels:
- conda-forge
- default
dependencies:
- python=3.7
- python=3.10
- numpy
- cython
- matplotlib