[Talk-de] Ersatz fuer Namefinder
Christof Amelunxen
christof.amelunxen at sbg.ac.at
Di Apr 28 08:03:15 UTC 2009
marcus.wolschon at googlemail.com wrote:
>> Das Problem ist die aggregate function "MIN" in Kombination mit
>> Distance(x,y), denn hierfür müssen zunächst einmal alle
>> Kombinationen ausgerechnet werden, da hilft dir auch kein räumlicher
> Index
>> weiter, denn die werden bei dieser Abfrage
>> nicht benutzt (zumindest nicht bei PostGIS oder Oracle Spatial).
>
> Er macht doch nur ein MIN auf den Einträgen, welche dem WHERE entsprechen.
Klar, allerdings ist die WHERE-Bedingung ja genau das Problen, denn die lautet sinngemäß "für alle Punkte vom Typ XY die
nicht weiter als der Suchradius XY voneinander entfernt sind". Wenn du dafür sowas wie "WHERE Distance(x,y) <= radius"
schreibst, dann muss er die Distanz trotzdem erstmal für alle Kombinationen ausrechnen und kann dafür auch keinen Index
benutzen - mit ST_DWithin hingegen klappt das.
> Ich nehme an ST_DWithin liefert dir alle elemente welche "within" sind
> und nicht das eine nächstgelegene welche der bounding-box aus der WHERE
> Bedingung entspricht?
Ja, eine "nearest neighbor"-Funktion gibt es bei Postgis aktuell nicht soweit ich weiß.
> Ich denke mal wir können abschliessen:
> * Es ist mit SQL möglich den einen oder keinen Ort zu einem Punkt
> entsprechend der aktuell im Wiki dokumentierten Semantik zu finden.
> * Es ist mit SQL auf einer Datenbank mit 2D-index effizient möglich.
> Einverstanden?
Keine Einwände, bei meinem Hinweis ging es ja auch nicht um das "ob" sondern nur um das "wie" :-)
Grüße,
Christof
Mehr Informationen über die Mailingliste Talk-de