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