Openstreetmap Objektabfrage programmieren für den eigenen Server

Ich kann bei einer Objektabfrage auf der OSM Karten-Webseite unter „Ähnliche Eigenschaften“ und „Umschließende Objekte“ sehen, ob ein Objekt sich auf einer Fußgängerzone, Wohngebiet, Gewerbegebiet, Industriegebiet, oder im Einkaufszentrum befindet. Da steht dann unter Attribute highway = residential, highway = pedestrian, shop = mall etc. Falls Fußgängerzone nicht angezeigt wird, gehe ich in die nächste Ebene (Je nachdem, wie die Ebenen aufgebaut sind) hoch und sehe, das dieses Objekt sich im Gewerbegebiet befindet.

Ich habe Openstreetmap auf meinem Server innerhalb meines Netzwerks installiert und habe somit zugriff auf alle Daten. Ich habe eine interne Webseite und darin sind Daten über diverse Shops enthalten. Ich möchte nun einen Programmcode schreiben und die obigen Daten mit der Webseite verknüpfen.

Kurz gesagt möchte ich dass bei jedem Shop angezeigt wird, ob dieser sich auf einer Fußgängerzone, Wohngebiet, Gewerbegebiet, Industriegebiet, oder im Einkaufszentrum befindet.

Wo kann ich genau danach suchen? Gibt es irgendwo einen Code, den ich editieren kann? Wo kann ich überhaupt danach suchen?

Der Quellcode von openstreetmap.org liegt auf github. Die Suchfunktion liegt wohl in app/assets/javascripts/index/query.js. Da wird ein overpass turbo-Abfrage verwendet. “leaflet overpass turbo” wäre dafür sicher ein guter Suchbegriff, brauchst aber vermutlich nicht, ausser du hast dein OSM als overpass turbo-Instanz laufen.

Die wichtigste Frage ist vermutlich: Was meinst Du denn mit “Ich habe Openstreetmap auf meinem Server innerhalb meines Netzwerks installiert”? Hast Du das als planet-file, als Datenbank?

Grüße
Max

Du meintest sicherlich eine Overpass QL Query für die Overpass API. overpass turbo wird für diese Funktion nicht benötigt.

Das gibt’s nicht wirklich. overpass turbo läuft nur im Browser als Web-Anwendung.

Ja, richtig. Ich verwende alle Kombinationen mit overpass fälschlicherweise als Synonyme :wink: Streicht alle "turbo"s.

Auf jeden Fall mal nicht, indem du dieselbe Frage gleichzeitig in verschiedenen Foren postest, das wird hier nicht so gerne gesehen: https://forum.openstreetmap.org/viewtopic.php?id=66528

Insgesamt sind hier einfach zu viele Punkte offen, um die Frage sinnvoll zu beantworten, z.B. ob die Daten alle auf osm.org liegen, oder du irgendwelche eigenen Daten hast. Willst du eine eigene Overpass API Instanz einrichten, oder doch lieber die vorhandene Postgresql nutzen (die das gewünschte mindestens genauso gut kann), etc. Und natürlich die Punkte, die maxbe auch schon angesprochen hat: was genau hsat du eigentlich lokal installiert?

Ich habe OSM als Datenbank. Was kann ich nun machen?

Was kann ich nun machen?

Die Daten liegen alle auf dem eigenen Server in der Datenbank. Das ganze ist irgendwie verknüpft mit der internen Webseite, welche die Daten von diversen Shops hat. Wenn ich mir die Tabellen in der Datenbank angucke, sehe ich zum Beispiel die Knotenpunkte und in einer anderen Spalte die Attribute wie etwa Fußgängerweg oder Einkaufszentrum usw. .

Von den Shops habe ich zum Beispiel die Geokoordinaten, wodurch in eine Verbindung zu den Knotenpunkten erstellen könnte und dadurch die Attribute herausbekommen und diese dann auf der Webseite anzeigen.

Dafür brauche ich irgendwo einen fertigen Programmcode, den ich noch anpassen kann.

Sorry, ich bin noch relativ neu bei OSM und sehe vor lauter Bäume den Wald nicht. Ich hoffe du versteht meine Problematik.

Fertigen Quellcode hab ich nicht, wüsste auch nicht, wo einer rumliegt. Ich stells mir auch im Detail dann schwierig vor…

Wennst wirklich so tief einsteigen willst, hätte ich hier ein paar Codeschnipsel, aber zwischen den Abfragen “was liegt in der Nähe?” und der Aussage “diese Koordinate liegt in der Fußgängerzone” ist es ein weiter weg, zumal die meisten Läden ja eher am Rand der Fußgängerzone liegen, in der Regel durch eine Mauer davon getrennt… Die Abfragen würde ich auch nicht bei jedem Klick machen, sondern einmal pro Laden und das Ergebnis dann in die Datenbank mit den Läden schreiben.

Als Einstieg würde ich mich mal mit der Datenbank beschäftigen, damit man mal sieht, wie das Zeug da rumliegt. Ein paar Abfragen, was in der Nähe ist…

Z.B. die nächsten Straßen neben der Koordinate (11.5773E 48.1429N), was eine willkürlich geklickte Apotheke ist:

select osm_id,name,highway,st_distance(way,(st_transform(ST_SetSRID(ST_Point(11.5773,48.1429),4326),3857))) as D  from planet_osm_line where highway is not null and way && st_expand(st_transform(ST_SetSRID(ST_Point(11.5773,48.1429),4326),3857),100) order by D limit 15;
  osm_id   |      name       | highway  |        d
-----------+-----------------+----------+------------------
 160015857 |                 | steps    | 20.6111222899325
 259225347 |                 | footway  | 20.6553013969454
 124731780 |                 | service  | 22.2407377921109
 259225354 |                 | footway  | 23.3234748002828
 100024916 |                 | footway  | 23.3234748002828
 259225358 |                 | steps    | 24.3270956351648
 124731779 |                 | footway  | 24.4010027396479
 259225384 |                 | footway  | 25.5356156859112
 383062077 |                 | footway  | 25.6348916126084
 124731785 |                 | service  | 26.1510713497584
  93192050 |                 | cycleway | 27.0560931013162
 160015867 |                 | footway  | 28.3127129175133
 259225366 |                 | footway  | 28.3127129175133
 380407135 | Brienner Straße | tertiary |  37.283306230963
 259131001 |                 | footway  |  38.581421159909

Du siehst die erste Tücke: Die nächsten paar Straßen sind uninteressant für deine Frage.

Das gleiche mit den Flächen in der Nähe:

select osm_id,name,highway,st_distance(way,(st_transform(ST_SetSRID(ST_Point(11.5773,48.1429),4326),3857))) as D  from planet_osm_polygon where highway is not null and way && st_expand(st_transform(ST_SetSRID(ST_Point(11.5773,48.1429),4326),3857),100) order by D limit 15;
  osm_id   |             name             |  highway   |        d
-----------+------------------------------+------------+------------------
  -4867157 |                              | pedestrian | 13.9424240990391
 373507751 | Odeonsplatz                  | footway    | 33.8960242000467
 259225398 |                              | corridor   | 35.0847037484837
  -4777267 | Platz vor der Feldherrnhalle | pedestrian | 44.1651891044458
 338648411 |                              | corridor   | 48.6153744550434
 370023036 |                              | elevator   | 55.7213597425854
 370023039 |                              | elevator   | 55.7279320129047
 370023038 |                              | elevator   | 55.7562136041321
  -4867158 |                              | pedestrian |  66.249728742952
 259225400 |                              | corridor   | 71.7758202509272
   3812120 | Wittelsbacherplatz           | pedestrian | 100.633779838114
 370023037 |                              | elevator   | 111.794196943487
 338648414 |                              | elevator   |  111.84608657919

Flächen, in denen dieser Punkt liegt:

select osm_id,name,highway,landuse,amenity,boundary from planet_osm_polygon where st_contains(way,st_transform(ST_SetSRID(ST_Point(11.5773,48.1429),4326),3857));
  osm_id   |            name            | highway |   landuse   | amenity |     boundary
-----------+----------------------------+---------+-------------+---------+-------------------
  -4016166 | Umweltzone München         |         |             |         | low_emission_zone
    -56388 | Stadtbezirk 03 Maxvorstadt |         |             |         | administrative
    -62428 | München                    |         |             |         | administrative
    -66090 | Bezirksteil Universität    |         |             |         | administrative
  -1100796 |                            |         |             |         | postal_code
 259759831 |                            |         | residential |         |
  -3146360 | München-Nord               |         |             |         | political
   -422653 |                            |         |             |         |
  -2145274 | Oberbayern                 |         |             |         | administrative
   -415051 | Südbayern                  |         |             |         | region
  25507206 |                            |         |             |         |

“Ganz einfach”

Wenn ich davon ausgehe, dass du mit “Datenbank” eine PostgreSQL/PostGIS-DB meinst, ist das selbstverständlich mit PostGIS-Abfragen machbar. Dafür ist PostGIS da.

Overpass ist dagegen mehr dafür gedacht, sowas zu machen, wenn man eben keine GIS-DB zur Verfügung hat.

Gib uns mal Details über deine Installation bekannt, dann kann man dir sicher helfen.

Ist nicht einfach aber das Tägliche Brot eines unsereiner.

Gruss
walter

Vielen Dank. Das sind soweit die richtigen Daten, bzw. der richtige Weg.