Speichern von Overpass-Abfrageergebnissen in einer GeoJSON-Datei mit Python

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)

 in ()
      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.

6 posts - 3 participants

Read full topic


Ce sujet de discussion accompagne la publication sur https://community.openstreetmap.org/t/speichern-von-overpass-abfrageergebnissen-in-einer-geojson-datei-mit-python/111164