PHP Sortierung nächsten Koordinaten

Ich habe eine MySQL-Tabelle in einer PHP-webservice mit Längen-und Breitengrad.
Ich möchte an die Nutzer zu schicken nur die, sagen wir mal, 5 nächsten Koordinaten.
Ich schrieb die Methode, die zur Berechnung einer Entfernung aus Koordinaten zu denen die Benutzer gesendet, in der POST-Anforderung, aber ich bin mir nicht sicher, wie zu Sortieren und nur senden Sie zurück ein paar.

Hier ist die Distanz-Methode:

function  distance($longToCompare,$latToCompare) {
    $dlong = $request_long - $longToCompare;
    $dlat = $request_lat - $latToCompare;
    $a = pow(sin($dlat/2)) + cos($latToCompare)*cos($request_lat)*pow(sin($dlong/2));
    $c = 2*atan2(sqrt($a),sqrt(1-$a));
    return 6373*$c; 
}

ist und der Benutzer derzeit wird die gesamte DB (für jetzt, während der Entwicklung, es ist klein, aber in der Zukunft könnte es sein eher große)

$q = mysql_query("SELECT * FROM Coordinates");
$coordinates = array ();
while ($e = mysql_fetch_assoc($q)) {
    $coordinates[] = $e;
}
print (json_encode($coordinates));

Kann jemand mir die richtige Richtung? Ich bin ziemlich neu in PHP, ich weiß, ich kann erstellen Sie eine benutzerdefinierte Sortierung mit uasort, aber ich bin mir nicht ganz sicher, wie es mit dieser distanzfunktion.

BEARBEITEN:
Mithilfe von @Norse 's Lösung, die aktuelle Abfrage ist:

$request_long = $_POST['longitude'];
$request_lat = $_POST['latitude'];
    $km = 0.5;
        $query = "SELECT *, 
    ( 6373 * acos( cos( radians('$request_lat') ) * 
    cos( radians( latitude ) ) * 
    cos( radians( longitude ) - 
    radians('$request_long') ) + 
    sin( radians('$request_lat') ) * 
    sin( radians( latitude ) ) ) ) 
    AS distance FROM Coordinates HAVING distance < '$km' ORDER BY distance ASC LIMIT 0, 5";
        $coordinates = array ();
        while ($e = mysql_fetch_assoc($query)) {
            $coordinates[] = $e;
        }
        print (json_encode($coordinates));
  • Haben Sie sich überlegt zu schreiben mysql-Funktion und verwenden Sie es in der sql-Abfrage?
  • ich bin ziemlich neu in diesem ganzen DB-Sache. kann u bitte näher erläutern?
  • ist es für die Junaio-AR-Plattform ?
  • Weiß nicht, was es ist, so ich raten bin, nicht. Es ist für, schließlich, iPhone & Android app
  • Was @WojtekT bedeutet, dass Sie schrieb Ihre Funktion mit Hilfe von PHP, aber Sie können schreiben Sie es als eine MySQL stored function mit MySQL Programmiersprache. So könnten Sie es direkt in der Abfrage, etwa so: SELECT * FROM Tabelle ORDER BY shortest_distance_to(X1, Y1, X2, Y2) ASC, die könnten sehr viel schneller als das abrufen von allen Koordinaten aus der Datenbank, um den PHP-interpreter und vergleichen Sie es, vor allem, wenn Ihr dataset sehr groß ist.
InformationsquelleAutor La bla bla | 2012-05-27
Schreibe einen Kommentar