OSMFILTER: Nodes mit Städtenamen exportieren

Hallo,
ich erstelle aus germany-latest.osm.pbf von Geofabrik eine Liste von Sport-/Turnhallen.
Diese Liste wird mit Batch via osmfilter in eine Textdatei exportiert.
Nur viele Nodes haben keine Ortsangabe, welche ich jedoch benötige.
Das Tag addr:city fehlt meistens.
Die csv-Ausgabe lautet:

@lon @lat name

1.) Gibt es eine Möglichkeit den Ortsnamen zusätzlich zu ermitteln und diesen mit auszugeben?

2.) Außerdem fehlen bei vielen Hallen der Name.
Kann man hier einen Defaultnamen zurückgeben, wenn dieser fehlt ?

Danke für einen Tipp.

1 Like

Das beantwortet deine Frage jetzt nicht, aber wenn du alle Objekte “leisure=sports_centre” ermitteln willst, reicht es nicht nur die vorhandenen Nodes (POIs) zu extrahieren. Du müßtest auch die entsprechend erfaßten Gebäude berücksichtigen. Was genau willst du denn mit der Liste erreichen?

Hallo @toc-rox
ich benötige eine Liste der Sporthallen mit Angabe des Ortes, sowie eine Bezeichnung die nicht leer ist (Defaultwert).
Damit ich ortsweise die Sporthallen in EXCEL filtern kann, um Touren für Anlieferung von Sportgeräten zusammenzustellen.
Ohne Ortsangabe ist die Liste nicht nutzbar.

@toc-rox

meine Abfrage z.B. bei Overpass lautet:

building=sports_hall OR building=sports_centre OR (leisure=sports_centre AND building=yes) OR (leisure=sports_hall AND building=yes)

Diesen Filter hätte ich gerne auch in OSMFILTER.

Ich sehe da zwei Probleme:

  1. osmfilter ist eher nicht dafür gedacht, Daten zu verarbeiten, sondern nur, Daten zu filtern.
  2. Wegen addr:city Berechnungen wie “In welcher boundary=postal_code” ist dieses Objekt?" kann osmfilter überhaupt nicht.

Meine Antwort wäre daher: Mit diesem Tool geht es nicht.

@GerdP
Schade :sleepy:

Gibt es Alternativen ?

Sorry, mein Deutsch ist nicht so gut. Du kannst auf das kleine Globus-Symbol unter meinem Post klicken, um es zu übersetzen.

You could use GeoDesk for this task.

You just need a little bit of setup:

  1. Install Python and a Java JVM (if your system doesn’t have them already)

  2. Install the GeoDesk Python module: pip install geodesk

  3. Download and install the GOL Tool

  4. Turn your .osm.pbf file into a GOL: gol build germany germany-latest.osm.pbf

  5. Copy the following script into sports_halls.py:

from geodesk import *

germany  = Features("germany.gol")
sports_halls = germany("na[building=sports_hall,sports_centre], na[building][leisure=sports_centre,sports_hall]")
cities   = germany("a[boundary=administrative][admin_level=8]")
counties = germany("a[boundary=administrative][admin_level=6]")
states   = germany("a[boundary=administrative][admin_level=4]")

def find_city(location):
    city = cities.containing(location).first
    if not city:
        city = counties.containing(location).first
        if not city:
            city = states.containing(location).first
    return city

print("name,lon,lat,city")
for hall in sports_halls:
    location = hall.centroid
    city_name = hall["addr:city"]
    if city_name is None:
        city = find_city(location)
        if city:
            city_name = city.name
        if city_name is None:
            city_name = "Unknown"
    print(f'"{hall.name}",{location.lon},{location.lat},"{city_name}"')

This script retrieves all sports halls (similar to your Overpass query above). If it does not have an explicit addr:city tag, the script checks the city in which the hall is located (administrative boundary of level 8, 6 or 4), and uses its name instead.

  1. Run the script: python sports_halls.py

This should give you a list like this:

name,lon,lat,city
"Mehrzweckhalle",8.3633573,54.9852222,"Kampen (Sylt)"
"Schwimmhalle List",8.4247487,55.0182719,"List auf Sylt"
"Sporthalle",7.8833456,54.1835547,"Helgoland"

(You can redirect the output into a file by adding > and the file name, e.g. python sports_halls.py > turnhallen.csv)

Let me know if you need to extract any other data, and I can show you how to update the script.

3 Likes

Just realized cities in Germany can also appear at admin_level 6 (kreisfreie Stadt) and 4 (city-states ,like Berlin). I’ve updated the script.

1 Like