ogd-at-lab/notebooks/webmapping.ipynb

297 wiersze
6.8 KiB
Plaintext
Czysty Wina Historia

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Welcome to the Mobile & Web Mapping Lab - Session 2!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Recap of session 1\n",
"\n",
"### Data collection & presentation as essential parts of geographic data science\n",
"\n",
"![](./img/datascience.png)\n",
"\n",
"*Figure: Data science workflow (Graser & Dragaschnig 2020).*\n",
"\n",
"### Intro to webmapping \n",
"\n",
"\n",
"![](./img/architecture.jpg)\n",
"\n",
"*Figure: Typical web mapping architecture (Brovelli et al. 2013).*\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Session 2: Webmapping services - more than just maps in a browser\n",
"\n",
"**Today's goals**\n",
"\n",
"* Understanding different types of web map service standards\n",
"* Exploring other useful non-standard service examples\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
" \n",
"### 1. Tiles / basemaps\n",
"\n",
"**Use case:** Map background / geographic context\n",
"\n",
"**Standard:** Web Map Tile Services (WMTS) / XYZ Tiles\n",
"\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"Basemap tiles are everywhere ...\n",
"\n",
"#### In desktop GIS, e.g. QGIS\n",
"\n",
"![](./img/osm-qgis.png)\n",
"\n",
"*Figure: OSM Tiles in QGIS*\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"#### In web maps, e.g. Leaflet\n",
"\n",
"![](./img/leaflet.png)\n",
"\n",
"*Figure: OSM Tiles in Leaflet*\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"#### In notebooks, e.g. Geoviews & Bokeh"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import holoviews as hv\n",
"import geoviews as gv\n",
"gv.extension('bokeh')\n",
"\n",
"basemap = hv.element.tiles.OSM().opts(width=450, height=450)\n",
"basemap"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Documentation: http://geoviews.org/user_guide/Working_with_Bokeh.html\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Raster maps\n",
"\n",
"**Use case:** Cartographic products (e.g. hillshades, topographic maps), map overlays ...\n",
"\n",
"**Standard:** Web Map Services (WMS) \n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"#### In desktop GIS, e.g. QGIS\n",
"\n",
"![](./img/wms-qgis.png)\n",
"\n",
"*Figure: WMS layers in QGIS*\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"#### In notebooks, e.g. Geoviews & Bokeh"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"url = \"\"\"\n",
"http://data.wien.gv.at/daten/geo?\n",
"&service=WMS\n",
"&request=GetMap\n",
"&layers=ogdwien:DONAUINSPKTOGD\n",
"&styles=\n",
"&format=image/png\n",
"&transparent=true\n",
"&version=1.3.0\n",
"&width=256\n",
"&height=256\n",
"&crs=EPSG:3857\n",
"&bbox={XMIN},{YMIN},{XMAX},{YMAX}\n",
"\"\"\"\n",
"\n",
"basemap = hv.element.tiles.OSM().opts(width=450, height=450)\n",
"map_with_overlay = basemap * hv.Tiles(url, extents=(1825290,6144246,1827693,6146435))\n",
"map_with_overlay"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"url2 = \"\"\"\n",
"http://data.wien.gv.at/daten/geo?\n",
"&service=WMS\n",
"&request=GetMap\n",
"&layers=ogdwien:DONAUKILOMETEROGD\n",
"&styles=\n",
"&format=image/png\n",
"&transparent=true\n",
"&version=1.3.0\n",
"&width=256\n",
"&height=256\n",
"&crs=EPSG:3857\n",
"&bbox={XMIN},{YMIN},{XMAX},{YMAX}\n",
"\"\"\"\n",
"\n",
"map_with_overlay * hv.Tiles(url2, extents=(1825290,6144246,1827693,6146435))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Source: https://github.com/holoviz/geoviews/issues/481\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. Vector data\n",
"\n",
"**Use case:** Access to geometry and attribute data\n",
"\n",
"**Standard:** Web Feature Services (WFS) \n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"#### In desktop GIS, e.g. QGIS\n",
"\n",
"![](./img/wfs-qgis.png)\n",
"\n",
"*Figure: WFS layer in QGIS*\n",
"\n",
"<br/>\n",
"<br/>\n",
"<br/>\n",
"\n",
"#### In notebooks, e.g. Geoviews & Bokeh"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import geopandas as gpd\n",
"from urllib.request import urlretrieve\n",
"import hvplot.pandas\n",
"\n",
"layer = 'CITYBIKEOGD'\n",
"file = f'data/{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",
"urlretrieve(url, file)\n",
"gdf = gpd.read_file(file)\n",
"gdf"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gdf.hvplot(geo=True, tiles='OSM', hover_cols=['STATION']).opts(active_tools=['wheel_zoom'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Other non-standard service examples\n",
"\n",
"1. [Geocoding addresses with Nominatim](geocoding.ipynb)\n",
"1. [Getting elevation information](elevation.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References\n",
"\n",
"* Brovelli, M., Minghini, M., & Zamboni, G. (2013). Web–based Participatory GIS with data collection on the field–A prototype architecture. In Free and Open Source Software for Geospatial (FOSS4G) Conference Proceedings (Vol. 13, No. 1, p. 5).\n",
"* Graser, A. & Dragaschnig, M. (2020). Open Geospatial Tools for Movement Data Exploration. KN Journal of Cartography and Geographic Information, 70(1), 3-10. doi:10.1007/s42489-020-00039-y."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}