x

Re: Openstreetmap Objektabfrage programmieren für den eigenen Server


Geschrieben von street-sytle (Gast) am 24. Juni 2019 11:18:01: [flux]

Als Antwort auf: Openstreetmap Objektabfrage programmieren für den eigenen Server geschrieben von street-sytle (Gast) am 16. Juni 2019 22:16:

maxbe wrote:

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

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␣|␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣|␣␣␣␣␣␣␣␣␣|␣␣␣␣␣␣␣␣␣␣␣␣␣|␣␣␣␣␣␣␣␣␣|

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