[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