Salü Community
ich will ein Leaflet erstellen, das die Daten deutscher Schulen zeigt.
Dazu hab ich ja verschieden Möglichkeiten.
a. Abfrage via Overpass-Turbo und Ausgabe der Daten in GeoJSon-format:
b. Abfrage via Python über die Overpass-Turbo-API
usw. usf.
Hintergrund: Ich habe mal überlegt, hier Python zu verwenden und möchte eine Abfrage an Overpass stellen und die Ergebnisse in einem Geodatenformat (z. B. GeoJSON) speichern. Soweit ich weiß, gibt es eine Bibliothek namens Overpy, nach der ich suchen sollte.
Nachdem ich die Dokumentation gelesen hatte, kam ich auf den folgenden kleinen Code:
geojson_school_map
import overpy
import json
API = overpy.Overpass()
# Fetch schools in Germany
result = API.query("""
[out:json][timeout:250];
{{geocodeArea:Deutschland}}->.searchArea;
nwr[amenity=school][!"isced:level"](area.searchArea);
out geom;
""")
# Create a GeoJSON dictionary to store the features
geojson = {
"type": "FeatureCollection",
"features": []
}
# Iterate over the result and extract relevant information
for node in result.nodes:
# Extract coordinates
lon = float(node.lon)
lat = float(node.lat)
# Create a GeoJSON feature for each node
feature = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [lon, lat]
},
"properties": {
"name": node.tags.get("name", "Unnamed School"),
"amenity": node.tags.get("amenity", "school")
# Add more properties as needed
}
}
# Append the feature to the feature list
geojson["features"].append(feature)
# Write the GeoJSON to a file
with open("schools.geojson", "w") as f:
json.dump(geojson, f)
print("GeoJSON file created successfully!")
was ich vorhabe: Ich werde die Daten der Abfrage der Overpass-API für Schulen in Deutschland hinzufügen.
Dabei gehe ich in einer Schrittfolge vor;
Nach der Extraktion der relevanten Informationen wie Koordinaten und Schulnamen werde ich diese Daten anschließend in das GeoJSON-Format konvertieren.
Schließlich werden die GeoJSON-Daten in eine Datei mit dem Namen „schools.geojson“ geschrieben.
hier meine resultate die ich bekomme, wenn ich das auf google-colab: laufen lasse.
verpassBadRequest Traceback (most recent call last)
<ipython-input-3-f0918b7fb5d0> in <cell line: 7>()
5
6 # Fetch schools in Germany
----> 7 result = API.query("""
8 [out:json][timeout:250];
9 {{geocodeArea:Deutschland}}->.searchArea;
/usr/local/lib/python3.10/dist-packages/overpy/__init__.py in query(self, query)
173 )
174 if not do_retry:
--> 175 raise current_exception
176 retry_exceptions.append(current_exception)
177 continue
OverpassBadRequest: Error: line 3: parse error: Unknown type "{"
Error: line 3: parse error: An empty query is not allowed
Error: line 3: parse error: ';' expected - '{' found.