[OSM-Devserver] PostGIS nächstes Objekt

Jochen Topf jochen at remote.org
Mo Nov 8 22:53:03 CET 2010


On Mon, Nov 08, 2010 at 10:27:13PM +0100, Peter Körner wrote:
> Am 08.11.2010 22:01, schrieb Alexander Matheisen:
>> Hallo,
>>
>> ich würde gerne für ein bestimmtes Obejekt (erstmal nur Punkte) den
>> nächsten Punkt mit einem bestimmten Tag herausfinden.
>>
>> Dazu habe ich folgendes versucht, bzw. nach Beispielen zusammmen
>> gebastelt, was aber irgendwie nicht so ganz will;
>> mache ich so ein Request, kommt kein Ergebnis, vorsichtshalber breche
>> ich immer nach ca. 10s ab, um die DB nicht noch zum Absturz zu bringen:
>>
>> SELECT h.tags->'name' AS name,
>> ST_Distance(ST_SetSRID(ST_Point(51.1983858,6.6872327),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' ORDER BY distance LIMIT 1;
>
> 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 
> :)

Der kreisförmige Buffer ist aber unnötig, eine einfache bbox sollte schneller
sein.

Jochen
-- 
Jochen Topf  jochen at remote.org  http://www.remote.org/jochen/  +49-721-388298