kopia lustrzana https://github.com/anitagraser/ogd-at-lab
add panel app
rodzic
f2c7bdea96
commit
5b0ec40bda
|
@ -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
|
||||
}
|
|
@ -3,7 +3,7 @@ channels:
|
|||
- conda-forge
|
||||
- default
|
||||
dependencies:
|
||||
- python=3.7
|
||||
- python=3.10
|
||||
- numpy
|
||||
- cython
|
||||
- matplotlib
|
||||
|
|
Ładowanie…
Reference in New Issue