1. Datenbeschaffung: Lade das Shapefile "Radnetz Deutschland" von der folgenden URL herunter: https://www.radroutenplaner-deutschland.de/downloads/Shape/Radnetz_Deutschland_Shape.zip. Stelle sicher, dass die notwendigen Bibliotheken wie Leafmap und Geopandas installiert sind.
2. Datenexploration: Nutze Geopandas, um die Struktur des Shapefiles zu erkunden. Untersuche die verschiedenen Layer und Attribute, die in den Geodaten enthalten sind.
3. Datenselektion: Selektiere eine Route, z.B. Route D08 aus dem Datensatz, und speichere diese Route in einer GeoJSON-Datei ab. Wiederhole die Selektion für alle nationalen D-Routen im Datensatz.
4. Routenanalyse: Führe eine grundlegende Analyse der Radwege durch. Identifiziere verschiedene Routentypen und analysiere, ob es Übereinstimmungen der Routennamen, z.B. in Wikidata oder den Codelisten zum Schema in der GDI-DE Registry gibt. Berechne auch die Längen der Routen und gib diese in einer Liste in Jupyter Notebook aus.
5. Datenvisualisierung: Kombiniere weitere Daten, z.B. der Verwaltungsgebiete bzw. Routendaten aus Hamburg, und visualisiere diese in unterschiedlichen Darstellungen. Verwende dafür mindestens die folgenden Datenquellen:
Codeliste D-Route = "https://registry.gdi-de.org/codelist/de.bund.balm.radnetz/D-Route/D-Route.de.json"
Sparql-Schnittstelle Wikidata= "https://query.wikidata.org/sparql"
Sparql-Abfrage = SELECT ?route ?routeLabel WHERE { ?route wdt:P31/wdt:P279 wd:Q353027; # Instanz von (oder Unterklasse von) Radfernweg SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de". } } LIMIT 5000
# Installation der benötigten Pakete (falls benötigt)
#!pip install leafmap geopandas owslib
#!pip install pandas matplotlib requests folium SPARQLWrapper fuzzywuzzy
# Import der Pakete
import leafmap
import folium
import matplotlib
import geopandas as gpd
import pandas as pd
import owslib
import requests
import SPARQLWrapper
import fuzzywuzzy
# Systempfade setzen (falls benötigt)
import os
os.environ['PROJ_LIB'] = '/opt/conda/envs/geo/share/proj'
# Lade das Shapefile herunter
m = leafmap.Map(height="700px", width="600px", center=(51.1657, 10.4515), zoom=6)
in_shp = 'https://www.radroutenplaner-deutschland.de/downloads/Shape/Radnetz_Deutschland_Shape.zip'
m.add_shp(in_shp, layer_name="DE_Radnetz_Shape")
m
Map(center=[51.1657, 10.4515], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zo…
# import geopandas
import geopandas as gpd
# setze GeoDataFrame
gdf = gpd.read_file(in_shp, zip='zip')
# Zeige die ersten Zeilen des Geodataframes an
print(gdf.head())
layer FID Routen-Nr Stand D01 D02 D03 D04 D05 D06 \
0 Radnetz_Deutschland 0 D08 1.12.2021 NaN NaN NaN NaN NaN NaN
1 Radnetz_Deutschland 0 D08 1.12.2021 NaN NaN NaN NaN NaN NaN
2 Radnetz_Deutschland 0 D08 1.12.2021 NaN NaN NaN NaN NaN NaN
3 Radnetz_Deutschland 0 D08 1.12.2021 NaN NaN NaN NaN NaN NaN
4 Radnetz_Deutschland 0 D08 1.12.2021 NaN NaN NaN NaN NaN NaN
D07 D08 D09 D10 D11 D12 RDE \
0 NaN D08 NaN NaN NaN NaN NaN
1 NaN D08 NaN NaN NaN NaN NaN
2 NaN D08 NaN NaN NaN NaN NaN
3 NaN D08 NaN NaN NaN NaN NaN
4 NaN D08 NaN NaN NaN NaN NaN
geometry
0 LINESTRING Z (447965.030 5430666.480 0.000, 44...
1 LINESTRING Z (444003.218 5424408.181 0.000, 44...
2 LINESTRING Z (446658.361 5429104.164 0.000, 44...
3 LINESTRING Z (446270.516 5426279.489 0.000, 44...
4 LINESTRING Z (448846.997 5431226.188 0.000, 44...
# Zeige Informationen zum Geodataframe an
print(gdf.info())
<class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 45136 entries, 0 to 45135 Data columns (total 18 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 layer 45136 non-null object 1 FID 45136 non-null object 2 Routen-Nr 45136 non-null object 3 Stand 45136 non-null object 4 D01 72 non-null object 5 D02 25 non-null object 6 D03 3333 non-null object 7 D04 7510 non-null object 8 D05 6281 non-null object 9 D06 4953 non-null object 10 D07 5775 non-null object 11 D08 5379 non-null object 12 D09 8224 non-null object 13 D10 117 non-null object 14 D11 7907 non-null object 15 D12 111 non-null object 16 RDE 3817 non-null object 17 geometry 45111 non-null geometry dtypes: geometry(1), object(17) memory usage: 6.2+ MB None
# Selektiere die Route D08
selected_route = gdf[gdf['D08'] == 'D08']
# Datenvisualisierung der ausgewählten Route
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 10))
# bundeslaender.plot(ax=ax, color='lightgrey', edgecolor='black')
selected_route.plot(ax=ax, color='red', linewidth=2)
plt.title('Route D08')
plt.show()
# Berechne die Länge der Route D08
length_km = selected_route.geometry.length.sum() / 1000
print(f"Länge der Route D08: {length_km:.2f} Kilometer")
Länge der Route D08: 1060.39 Kilometer
# Speichere die Ausgabe in ein GeoJSON-File
output_geojson_path = 'route_d08.geojson'
selected_route.to_file(output_geojson_path, driver='GeoJSON')
# Optional: Zeige die ersten Zeilen des GeoJSON an
with open(output_geojson_path, 'r') as f:
first_lines = [next(f) for _ in range(10)]
print("".join(first_lines))
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::25832" } },
"features": [
{ "type": "Feature", "properties": { "layer": "Radnetz_Deutschland", "FID": "0", "Routen-Nr": "D08", "Stand": "1.12.2021", "D01": null, "D02": null, "D03": null, "D04": null, "D05": null, "D06": null, "D07": null, "D08": "D08", "D09": null, "D10": null, "D11": null, "D12": null, "RDE": null }, "geometry": { "type": "LineString", "coordinates": [ [ 447965.029840470757335, 5430666.479664971120656, 0.0 ], [ 447979.39170913916314, 5430661.191097031347454, 0.0 ], [ 448010.344604903657455, 5430650.335754896514118, 0.0 ], [ 448074.239924668800086, 5430630.126485180109739, 0.0 ] ] } },
{ "type": "Feature", "properties": { "layer": "Radnetz_Deutschland", "FID": "0", "Routen-Nr": "D08", "Stand": "1.12.2021", "D01": null, "D02": null, "D03": null, "D04": null, "D05": null, "D06": null, "D07": null, "D08": "D08", "D09": null, "D10": null, "D11": null, "D12": null, "RDE": null }, "geometry": { "type": "LineString", "coordinates": [ [ 444003.21791760501219, 5424408.181171326898038, 0.0 ], [ 444011.199789307371248, 5424408.715740644373, 0.0 ], [ 444102.163699104741681, 5424428.84230828192085, 0.0 ], [ 444191.018168152717408, 5424434.06083313934505, 0.0 ], [ 444213.953347711823881, 5424437.174612299539149, 0.0 ], [ 444227.137920260312967, 5424441.813925477676094, 0.0 ] ] } },
{ "type": "Feature", "properties": { "layer": "Radnetz_Deutschland", "FID": "0", "Routen-Nr": "D08", "Stand": "1.12.2021", "D01": null, "D02": null, "D03": null, "D04": null, "D05": null, "D06": null, "D07": null, "D08": "D08", "D09": null, "D10": null, "D11": null, "D12": null, "RDE": null }, "geometry": { "type": "LineString", "coordinates": [ [ 446658.360785185359418, 5429104.164283268153667, 0.0 ], [ 446655.929365392425098, 5429115.511378769762814, 0.0 ], [ 446650.907739277579822, 5429130.651233154349029, 0.0 ], [ 446647.685251756920479, 5429145.259884966537356, 0.0 ], [ 446649.528429756290279, 5429151.657506570219994, 0.0 ], [ 446654.622152950963937, 5429157.556520631536841, 0.0 ], [ 446658.973964768112637, 5429160.374626773409545, 0.0 ], [ 446665.382776980171911, 5429162.101284331642091, 0.0 ], [ 446697.281726007699035, 5429168.330113486386836, 0.0 ], [ 446723.800445606058929, 5429172.541577091440558, 0.0 ], [ 446732.364942369691562, 5429176.683167390525341, 0.0 ], [ 446741.353971245873254, 5429184.478263146243989, 0.0 ], [ 446749.309016718121711, 5429195.714534590952098, 0.0 ], [ 446754.365877100499347, 5429207.255460719577968, 0.0 ], [ 446762.842272764188237, 5429233.442324205301702, 0.0 ], [ 446768.077949141617864, 5429251.526707368902862, 0.0 ], [ 446770.86706229520496, 5429265.657537424936891, 0.0 ], [ 446771.318174268119037, 5429279.590826139785349, 0.0 ], [ 446769.829974905995186, 5429295.821007230319083, 0.0 ], [ 446766.411885343142785, 5429331.779125048778951, 0.0 ], [ 446766.152705134707503, 5429355.061268516816199, 0.0 ], [ 446768.140466812881641, 5429376.744407734833658, 0.0 ], [ 446772.077107191493269, 5429400.670643603429198, 0.0 ], [ 446773.834116403129883, 5429418.54259947873652, 0.0 ], [ 446774.970281369576696, 5429442.20958280749619, 0.0 ], [ 446777.06519835034851, 5429458.258024519309402, 0.0 ], [ 446782.020397588552441, 5429474.813371261581779, 0.0 ], [ 446788.494469377561472, 5429490.578575278632343, 0.0 ], [ 446795.261592204798944, 5429503.891987837851048, 0.0 ], [ 446803.709226866485551, 5429518.47903127130121, 0.0 ], [ 446810.249581146636046, 5429533.391541198827326, 0.0 ], [ 446817.162548036896624, 5429548.369316919706762, 0.0 ], [ 446824.330190440814476, 5429559.166679246351123, 0.0 ], [ 446831.130786036141217, 5429567.258340001106262, 0.0 ], [ 446841.936638995888643, 5429576.991706439293921, 0.0 ], [ 446860.822902160929516, 5429590.00571849104017, 0.0 ], [ 446874.864695077063516, 5429600.641157867386937, 0.0 ], [ 446885.702415345935151, 5429609.663202062249184, 0.0 ], [ 446903.265180195856374, 5429625.119755376130342, 0.0 ], [ 446916.43402763013728, 5429635.429692701436579, 0.0 ], [ 446926.363698091707192, 5429642.227471662685275, 0.0 ], [ 446935.641614982509054, 5429647.970945214852691, 0.0 ], [ 446955.95305245736381, 5429661.618620967492461, 0.0 ], [ 446967.849499085685238, 5429672.628938978537917, 0.0 ], [ 446979.168843209103215, 5429684.472149865701795, 0.0 ], [ 446987.642176071647555, 5429695.157841524109244, 0.0 ], [ 446999.339676761941519, 5429708.976249923929572, 0.0 ], [ 447012.196280312433373, 5429719.988582958467305, 0.0 ], [ 447031.95753506134497, 5429735.908189408481121, 0.0 ], [ 447047.585576154117007, 5429748.721036345697939, 0.0 ], [ 447052.468119085126091, 5429757.11857474502176, 0.0 ], [ 447053.819482155144215, 5429767.515951019711792, 0.0 ] ] } },
{ "type": "Feature", "properties": { "layer": "Radnetz_Deutschland", "FID": "0", "Routen-Nr": "D08", "Stand": "1.12.2021", "D01": null, "D02": null, "D03": null, "D04": null, "D05": null, "D06": null, "D07": null, "D08": "D08", "D09": null, "D10": null, "D11": null, "D12": null, "RDE": null }, "geometry": { "type": "LineString", "coordinates": [ [ 446270.515946616011206, 5426279.489409912377596, 0.0 ], [ 446288.847637785598636, 5426291.635643377900124, 0.0 ], [ 446309.952992157544941, 5426305.892387072555721, 0.0 ], [ 446371.769070748239756, 5426343.101446061395109, 0.0 ], [ 446531.887781595636625, 5426438.858637192286551, 0.0 ], [ 446552.195627658162266, 5426445.086224062368274, 0.0 ], [ 446562.402929373201914, 5426449.803036049939692, 0.0 ], [ 446571.181163332192227, 5426454.546351196244359, 0.0 ], [ 446577.913172729196958, 5426458.630515027791262, 0.0 ], [ 446580.871980200055987, 5426461.123732776381075, 0.0 ] ] } },
{ "type": "Feature", "properties": { "layer": "Radnetz_Deutschland", "FID": "0", "Routen-Nr": "D08", "Stand": "1.12.2021", "D01": null, "D02": null, "D03": null, "D04": null, "D05": null, "D06": null, "D07": null, "D08": "D08", "D09": null, "D10": null, "D11": null, "D12": null, "RDE": null }, "geometry": { "type": "LineString", "coordinates": [ [ 448846.996668803389184, 5431226.187533123418689, 0.0 ], [ 448852.670935590576846, 5431270.266151095740497, 0.0 ], [ 448855.178429577033967, 5431289.408296569250524, 0.0 ], [ 448866.421328209456988, 5431364.278765141032636, 0.0 ], [ 448874.073981261230074, 5431418.169794250279665, 0.0 ], [ 448883.900964718661271, 5431486.825833883136511, 0.0 ], [ 448891.408804393839091, 5431535.792237253859639, 0.0 ], [ 448896.480898818001151, 5431563.13348436076194, 0.0 ] ] } },
{ "type": "Feature", "properties": { "layer": "Radnetz_Deutschland", "FID": "0", "Routen-Nr": "D08", "Stand": "1.12.2021", "D01": null, "D02": null, "D03": null, "D04": null, "D05": null, "D06": null, "D07": null, "D08": "D08", "D09": null, "D10": null, "D11": null, "D12": null, "RDE": null }, "geometry": { "type": "LineString", "coordinates": [ [ 446088.464664575469214, 5426198.64028303977102, 0.0 ], [ 446111.190932732191868, 5426210.892804160714149, 0.0 ], [ 446138.086091997567564, 5426219.820224608294666, 0.0 ], [ 446169.082109584182035, 5426230.025616874918342, 0.0 ], [ 446192.785382263013162, 5426238.659200985915959, 0.0 ], [ 446211.440755656920373, 5426247.862403748556972, 0.0 ], [ 446231.676814503385685, 5426259.103278701193631, 0.0 ], [ 446249.472359775216319, 5426265.530242184177041, 0.0 ], [ 446262.09467826038599, 5426270.621623910032213, 0.0 ], [ 446270.515946616011206, 5426279.489409912377596, 0.0 ] ] } },
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
# Annahme: gdf ist Ihr GeoDataFrame für alle Routen
# Liste der Routen von D01 bis RDE
route_codes = ['D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D08', 'D09', 'D10', 'D11', 'D12', 'RDE']
# Liste für die gespeicherten GeoDataFrames
saved_routes = []
for route_code in route_codes:
# Selektion der aktuellen Route
selected_route = gdf[gdf[route_code] == route_code]
# Berechne die Länge der aktuellen Route
length_km = selected_route.geometry.length.sum() / 1000
# Füge die Länge als neue Spalte hinzu
selected_route['Laenge'] = length_km
# Speichere das GeoDataFrame in die Liste
saved_routes.append(selected_route)
# Datenvisualisierung der ausgewählten Route
fig, ax = plt.subplots(figsize=(10, 10))
selected_route.plot(ax=ax, color='red', linewidth=2)
plt.title(f"Route {route_code} - Länge: {length_km:.2f} km")
plt.show()
# Kombiniere die GeoDataFrames zu einem einzigen GeoDataFrame
combined_routes = gpd.GeoDataFrame(pd.concat(saved_routes, ignore_index=True), crs=gdf.crs)
# Transformiere die Koordinaten in EPSG:4326
combined_routes = combined_routes.to_crs(epsg=4326)
# Speichere das kombinierte GeoDataFrame als GeoJSON-Datei
combined_routes.to_file('combined_routes.geojson', driver='GeoJSON')
import geopandas as gpd
# Liste der Routen von D01 bis RDE
selected_routes = gdf.loc[:, 'D01':'RDE']
# Berechne und zeige die Länge jeder Route
for route_code in selected_routes.columns:
selected_route = gdf[gdf[route_code] == route_code]
length_km = selected_route.geometry.length.sum() / 1000
print(f"Länge der Route {route_code}: {length_km:.2f} Kilometer")
Länge der Route D01: 933.54 Kilometer Länge der Route D02: 1073.80 Kilometer Länge der Route D03: 980.37 Kilometer Länge der Route D04: 1045.79 Kilometer Länge der Route D05: 1023.87 Kilometer Länge der Route D06: 796.23 Kilometer Länge der Route D07: 1120.90 Kilometer Länge der Route D08: 1060.39 Kilometer Länge der Route D09: 1292.18 Kilometer Länge der Route D10: 846.49 Kilometer Länge der Route D11: 1585.87 Kilometer Länge der Route D12: 590.72 Kilometer Länge der Route RDE: 1176.83 Kilometer
import requests
import pandas as pd
# URL der Codeliste
url = "https://registry.gdi-de.org/codelist/de.bund.balm.radnetz/D-Route/D-Route.de.json"
# Abrufen der Daten
response = requests.get(url)
data = response.json()
# Zugriff auf die benötigten Daten unter 'de.bund.balm.radnetz' -> 'containeditems'
contained_items = data['de.bund.balm.radnetz']['containeditems']
# Extraktion von 'id' und 'label' für jedes Element
items_list = [{
'id': item['value']['id'],
'label': item['value']['label']['text']
} for item in contained_items]
# Erstellen einer DataFrame
df = pd.DataFrame(items_list)
# Anzeigen der Tabelle
df
| id | label | |
|---|---|---|
| 0 | https://registry.gdi-de.org/codelist/de.bund.b... | D1 Nordseeküstenroute |
| 1 | https://registry.gdi-de.org/codelist/de.bund.b... | D2 Ostseeküstenroute |
| 2 | https://registry.gdi-de.org/codelist/de.bund.b... | D3 Europaroute |
| 3 | https://registry.gdi-de.org/codelist/de.bund.b... | D4 Mittelland-Route |
| 4 | https://registry.gdi-de.org/codelist/de.bund.b... | D5 Saar-Mosel-Main |
| 5 | https://registry.gdi-de.org/codelist/de.bund.b... | D6 Donauroute |
| 6 | https://registry.gdi-de.org/codelist/de.bund.b... | D7 Pilgerroute |
| 7 | https://registry.gdi-de.org/codelist/de.bund.b... | D8 Rhein-Route |
| 8 | https://registry.gdi-de.org/codelist/de.bund.b... | D9 Weser - Romantische Straße |
| 9 | https://registry.gdi-de.org/codelist/de.bund.b... | D10 Elbradweg |
| 10 | https://registry.gdi-de.org/codelist/de.bund.b... | D11 Ostsee - Oberbayern |
| 11 | https://registry.gdi-de.org/codelist/de.bund.b... | D12 Oder-Neiße-Radweg |
| 12 | https://registry.gdi-de.org/codelist/de.bund.b... | Radweg Deutsche Einheit |
| 13 | https://registry.gdi-de.org/codelist/de.bund.b... | Iron-Curtain-Trail |
from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd
import time
# Liste der Labels aus der Datei
labels = [
'D1 Nordseeküstenroute', 'D2 Ostseeküstenroute', 'D3 Europaroute',
'D4 Mittelland-Route', 'D5 Saar-Mosel-Main', 'D6 Donauroute',
'D7 Pilgerroute', 'D8 Rhein-Route', 'D9 Weser - Romantische Straße',
'D10 Elbradweg', 'D11 Ostsee - Oberbayern', 'D12 Oder-Neiße-Radweg',
'Radweg Deutsche Einheit', 'Iron-Curtain-Trail'
]
# SPARQL-Endpoint von Wikidata
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
sparql.addCustomHttpHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36")
# Funktion zum Abfragen von Wikidata für ein gegebenes Label
def query_wikidata(label, retries=3, delay=5):
cleaned_label = label.strip().rstrip('\xa0')
query = f'''
SELECT ?item ?itemLabel WHERE {{
?item rdfs:label "{cleaned_label}"@de.
SERVICE wikibase:label {{ bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de". }}
}}
LIMIT 1
'''
sparql.setQuery(query)
sparql.setReturnFormat(JSON)
for attempt in range(retries):
try:
results = sparql.query().convert()
for result in results["results"]["bindings"]:
return result["item"]["value"], result["itemLabel"]["value"]
except Exception as e:
print(f"Error for label '{label}', attempt {attempt+1}/{retries}: {e}")
time.sleep(delay)
return "Nicht gefunden", "Nicht gefunden"
# Listen für die Sammlung der Ergebnisse
labels_list = []
items_list = []
itemLabels_list = []
# Abfrage für jedes Label ausführen und Ergebnisse in Listen sammeln
for label in labels:
item, itemLabel = query_wikidata(label)
labels_list.append(label)
items_list.append(item)
itemLabels_list.append(itemLabel)
time.sleep(5) # Pause zwischen den Anfragen, um Überlastung zu vermeiden
# Erstellen des DataFrames aus den Listen
df_results = pd.DataFrame({
'Label': labels_list,
'Wikidata Item': items_list,
'Wikidata Label': itemLabels_list
})
# Ergebnisse anzeigen
print(df_results)
Label Wikidata Item \
0 D1 Nordseeküstenroute Nicht gefunden
1 D2 Ostseeküstenroute Nicht gefunden
2 D3 Europaroute Nicht gefunden
3 D4 Mittelland-Route Nicht gefunden
4 D5 Saar-Mosel-Main Nicht gefunden
5 D6 Donauroute Nicht gefunden
6 D7 Pilgerroute Nicht gefunden
7 D8 Rhein-Route Nicht gefunden
8 D9 Weser - Romantische Straße Nicht gefunden
9 D10 Elbradweg Nicht gefunden
10 D11 Ostsee - Oberbayern Nicht gefunden
11 D12 Oder-Neiße-Radweg Nicht gefunden
12 Radweg Deutsche Einheit http://www.wikidata.org/entity/Q29035474
13 Iron-Curtain-Trail Nicht gefunden
Wikidata Label
0 Nicht gefunden
1 Nicht gefunden
2 Nicht gefunden
3 Nicht gefunden
4 Nicht gefunden
5 Nicht gefunden
6 Nicht gefunden
7 Nicht gefunden
8 Nicht gefunden
9 Nicht gefunden
10 Nicht gefunden
11 Nicht gefunden
12 Radweg Deutsche Einheit
13 Nicht gefunden
from SPARQLWrapper import SPARQLWrapper, JSON
from fuzzywuzzy import process
# SPARQL-Endpunkt von Wikidata
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
# Labels, für die wir Einträge in Wikidata finden möchten
labels = [
'D1 Nordseeküstenroute', 'D2 Ostseeküstenroute', 'D3 Europaroute',
'D4 Mittelland-Route', 'D5 Saar-Mosel-Main', 'D6 Donauroute',
'D7 Pilgerroute', 'D8 Rhein-Route', 'D9 Weser - Romantische Straße',
'D10 Elbradweg', 'D11 Ostsee - Oberbayern', 'D12 Oder-Neiße-Radweg',
'Radweg Deutsche Einheit', 'Iron-Curtain-Trail'
]
# SPARQL-Abfrage, um Namen von Radwegen zu erhalten (hier vereinfacht)
sparql_query = """
SELECT ?route ?routeLabel WHERE {
?route wdt:P31/wdt:P279* wd:Q353027; # Instanz von (oder Unterklasse von) Radfernweg
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de". }
}
LIMIT 5000 # Begrenzung der Abfrage
"""
request_url = "https://query.wikidata.org/sparql"
response = requests.get(request_url, params={'query': sparql_query, 'format': 'json'})
data = response.json()
# Extrahieren der Radwegnamen aus der Abfrageantwort
wikidata_labels = [item['routeLabel']['value'] for item in data['results']['bindings']]
# Für jedes Label in der Liste den besten Match in den Wikidata-Labels finden
for label in labels:
best_match, score = process.extractOne(label, wikidata_labels)
print(f"Label: {label} - Bester Wikidata Match: {best_match} mit Score: {score}")
Label: D1 Nordseeküstenroute - Bester Wikidata Match: EuroVelo 12 - Nordseeküsten-Route mit Score: 81 Label: D2 Ostseeküstenroute - Bester Wikidata Match: Ostseeküstenroute mit Score: 95 Label: D3 Europaroute - Bester Wikidata Match: Europaroute (D3) mit Score: 95 Label: D4 Mittelland-Route - Bester Wikidata Match: Mittelland-Route mit Score: 95 Label: D5 Saar-Mosel-Main - Bester Wikidata Match: Main-Radweg mit Score: 86 Label: D6 Donauroute - Bester Wikidata Match: Grünroute mit Score: 68 Label: D7 Pilgerroute - Bester Wikidata Match: Pilgerroute (D7) mit Score: 95 Label: D8 Rhein-Route - Bester Wikidata Match: Rhein-Route mit Score: 95 Label: D9 Weser - Romantische Straße - Bester Wikidata Match: Elbe-Weser-Radweg mit Score: 86 Label: D10 Elbradweg - Bester Wikidata Match: Elberadweg mit Score: 78 Label: D11 Ostsee - Oberbayern - Bester Wikidata Match: Ostsee–Oberbayern (D11) mit Score: 95 Label: D12 Oder-Neiße-Radweg - Bester Wikidata Match: Oder-Neiße-Radweg mit Score: 95 Label: Radweg Deutsche Einheit - Bester Wikidata Match: Radweg Deutsche Einheit mit Score: 100 Label: Iron-Curtain-Trail - Bester Wikidata Match: EuroVelo 13 - The Iron Curtain Trail mit Score: 90
import requests
import geopandas as gpd
import leafmap
# WFS-URL für die Verwaltungsgebiete
wfs_vg250 = 'https://sgx.geodatenzentrum.de/wfs_vg250?service=wfs&version=2.0.0&request=GetFeature&TYPENAMES=vg250_lan&outputformat=json&srsName=EPSG:4326'
# Daten abrufen
data_vg250 = requests.get(wfs_vg250).json()
# GeoDataFrame aus den GeoJSON-Daten erstellen
gdf = gpd.GeoDataFrame.from_features(data_vg250["features"])
# Koordinatensystem setzen
gdf.crs = "EPSG:4326"
# Leafmap-Karte erstellen
m = leafmap.Map(height="700px", width="600px", center=(51.1657, 10.4515), zoom=6)
# GeoDataFrame zu GeoJSON konvertieren und mit Style hinzufügen
m.add_gdf(gdf, layer_name="Verwaltungsgebiete DE", style={"color": "black", "weight": 2, "fillOpacity": 0, "dashArray": "5, 5"})
# Layer-Kontrollleiste hinzufügen und Karte anzeigen
m.add_layer_control()
m
Map(center=[51.1657, 10.4515], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zo…
import requests
import geopandas as gpd
import leafmap
# WFS-URLs
wfs_radfernwege = 'https://geodienste.hamburg.de/HH_WFS_Freizeitrouten?service=WFS&request=GetFeature&version=2.0.0&typeNames=de.hh.up%3Aradfernwege&typeName=de.hh.up%3Aradfernwege&outputFormat=application%2Fgeo%2Bjson&resultType=results&SRSNAME=EPSG%3A4326&count=37&bbox=9.731784%2C+53.394007%2C+10.321975%2C+53.565852%2C++EPSG%3A4326'
wfs_freizeitrouten = 'https://geodienste.hamburg.de/HH_WFS_Freizeitrouten?service=WFS&request=GetFeature&version=2.0.0&typeNames=de.hh.up%3Afreizeitrouten&typeName=de.hh.up%3Afreizeitrouten&outputFormat=application%2Fgeo%2Bjson&resultType=results&SRSNAME=EPSG%3A4326&count=156&bbox=9.731784%2C+53.394075%2C+10.321150%2C+53.739937%2C++EPSG%3A4326'
# Daten abrufen
data_radfernwege = requests.get(wfs_radfernwege).json()
data_freizeitrouten = requests.get(wfs_freizeitrouten).json()
# GeoDataFrames erstellen und CRS setzen
gdf_radfernwege = gpd.GeoDataFrame.from_features(data_radfernwege["features"])
gdf_radfernwege.crs = "EPSG:4326"
gdf_freizeitrouten = gpd.GeoDataFrame.from_features(data_freizeitrouten["features"])
gdf_freizeitrouten.crs = "EPSG:4326"
# Leafmap-Karte erstellen
m = leafmap.Map(height="700px", width="600px", center=(53.5511, 9.9937), zoom=10) # Hamburg zentrieren
# GeoDataFrames mit unterschiedlichem Stil zur Karte hinzufügen
m.add_gdf(gdf_radfernwege, layer_name="Radfernwege HH", style={"color": "red", "weight": 2, "dashArray": "5, 5"})
m.add_gdf(gdf_freizeitrouten, layer_name="Freizeitrouten HH", style={"color": "green", "weight": 2})
# Layer-Kontrolle hinzufügen und Karte anzeigen
m.add_layer_control()
m
Map(center=[53.5511, 9.9937], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoo…
# Leafmap-Karte mit Radnetz Deutschland erstellen
m = leafmap.Map(height="700px", width="600px", center=(51.1657, 10.4515), zoom=6)
in_shp = 'https://www.radroutenplaner-deutschland.de/downloads/Shape/Radnetz_Deutschland_Shape.zip'
m.add_shp(in_shp, layer_name="Radnetz DE", style={"color": "blue", "weight": 2})
# Weitere Datensätze mit einer unterschiedlichen Farbe hinzufügen
m.add_geojson(data_vg250, layer_name="Verwaltungsgebiete DE", style={"color": "black", "weight": 2, "fillOpacity": 0, "dashArray": "5, 5"})
m.add_geojson(data_freizeitrouten, layer_name="Freizeitrouten HH", style={"color": "green", "weight": 2})
m.add_geojson(data_radfernwege, layer_name="Radfernwege HH", style={"color": "red", "weight": 2, "dashArray": "5, 5"})
# Karte mit Layer-Controll anzeigen
m.add_layer_control()
m
Warning: The dataset does not have a CRS defined. Assuming EPSG:4326. Warning: The dataset does not have a CRS defined. Assuming EPSG:4326. Warning: The dataset does not have a CRS defined. Assuming EPSG:4326.
Map(center=[51.1657, 10.4515], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zo…