[OSM-Devserver] PostGIS nächstes Objekt

Alexander Matheisen AlexanderMatheisen at ish.de
Do Nov 11 19:03:30 CET 2010


> Nach allem was ich sehe, testest du jedes mal alle points des gesamten 
> planeten, da du keine geographische Einschränkung vornimmst. Das ORDER 
> BY sorgt dafür, dass zunächst alle Zeilen geladen werden, dann sortiert 
> und danach die oberste ausgeliefert wird.
> 
> Umgehen könntest du das mit einer geograhischen Einschränkung:
> 
> SELECT
>    h.osm_id,
>    h.tags->'name',
>    ST_AsText(h.way) AS geom,
>    ST_Distance(
>      ST_SetSRID(s.way,4326),
>      ST_SetSRID(h.way,4326)
>    ) AS distance
> FROM
>    planet_point AS s,
>    planet_point AS h
> WHERE s.osm_id = 330447462
>    AND h.tags->'amenity' = 'pub'
>    AND h.way && ST_Buffer(s.way, 1000)
> ORDER BY distance;
> 
> 
> ST_Buffer erzeugt eine 1km große Pufferzone (bei einem Punkt ist das ein 
> Kreis mit einem Radius von 1km) um den Quellpunkt und ermittelt dann 
> alle passenden Points darin. Diese werden dann nach Entfernung sortiert. 
> Wenn kein Ergebnis gefunden wurde, kann das Query mit einer größeren 
> Pufferzone wiederholt werden. Das LIMIT 1 musst du noch selbst hinzufügen :)

Danke für die ganze Hilfe hier, funzt nun super. Ein Problem habe ich
noch: Ich will keine Objekte mit gleichem Namen haben. Hintergrund: Will
ich mir die nächste Bushaltestelle anzeigen lassen, taucht jede zwei mal
auf, da beide Seiten getrennt eingetragen sind. Geht das irgendwie mit
DISTINCT? Wenn ja, wo muss das dann hin? Direkt hinter SELECT hat es
nicht geklappt.


Alex