Berechnung von Entfernungen, Umkreissuche

Hallo zusammen,

ich sitze gerade an einer Webanwendung, die eine Umkreissuche um einen Punkt realisieren soll.
Dabei lade ich momentan alle Objekte und werte die Entfernung per PHP aus. Dazu nutze ich folgende Funktion:


function getDistance ($lat1, $lon1, $lat2, $lon2) {    
    $lat = ($lat1 + $lat2) / 2 * 0.01745;
    $distance = 111.324 * acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($lon2 - $lon1));
        
    return $distance;
}

Ich möchte nur Objekte in einem bestimmten Umkreis finden.
Das geht doch über eine geschickte SQL-Abfrage sicher besser, oder?

Kann mir jemand helfen? Danke!

VG Andreas

Ja, verwende einfach PostGIS mit den passenden Datentypen. In Version 2.0 gibt es auch indexbased Umkreissuche via KNN GIST. Gisman kommt bestimmt bald vorbei und erklärt es Dir,
ich bin da noch nicht so ganz fit …

Da es eine Webanwendung ist: falls Du keinen Provider mit PostGIS 2.0 findest einfach mich fragen :wink:


Andreas

Habe auch schon über PostGIS nachgedacht. Aber schieße ich damit nicht mit Kanonen auf Spatzen?
Eigentlich sind das doch nur ein paar Berechnungen mit cos, sin und acos. Könnte ich das nicht auch ganz simpel mit einer Standard-SQL-Expression abbilden (also ohne PostGIS-Extension).

Ich vermute mal, dass meine Abfrage nicht so performant ist wie eine spezielle indexbasierte Umkreissuche. Es sind aber auch keine Unmengen von Daten.

Vielleich scheue ich mich einfach auch zu Unrecht vor PostGIS. Nur ich kann den Aufwand das zu konfigurieren/implementieren/nutzen überhaupt nicht beurteilen.

Warten wir also auf den gisman :slight_smile:

Danke soweit…

Du kannst so eine einfache Funktion sicher auch in plpgsql implementieren und nach der Distanz auswerten.
Vorteil von PostGIS:
du kannst verschiedene Koordinatensysteme gleichzeitig benutzen, es ist vermutlich schneller, nutzt einen geographische Index und du kannst damit flexibler auf gestiegene Anforderungen reagieren.
Nachteil PostGIS: Man sollte ein bischen was von Geographie und Koordinaten verstehen (oder hier fragen :wink: )

Gruß Uwe

EDIT: Sorry für die Verspätung, bin grad mit zuviel anderem beschäftigt…