Heim >Datenbank >MySQL-Tutorial >Wie finde ich Punkte innerhalb eines Radius mithilfe von Breiten- und Längengrad?

Wie finde ich Punkte innerhalb eines Radius mithilfe von Breiten- und Längengrad?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 03:21:02237Durchsuche

How to Find Points Within a Radius Using Latitude and Longitude?

Bestimmen der Nähe innerhalb eines Radius bei gegebenen Breiten- und Längengraden

Stellen Sie sich ein Szenario vor, in dem Benutzer in einem Formular ihren Längen- und Breitengrad eingeben können. Gleichzeitig enthält eine Datenbank eine Tabelle mit einer umfassenden Liste geografischer Koordinaten. Die vorliegende Aufgabe besteht darin, alle Punkte innerhalb eines 15-Meilen-Radius um die Koordinaten des Benutzers zu identifizieren.

Lösung:

Um dies zu erreichen, nutzen wir das Konzept der Entfernungsberechnung zwischen zwei Punkten mithilfe einer bestimmten Formel:

function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') {
    $theta = $longitude1 - $longitude2;
    $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) +
                (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) *
                cos(deg2rad($theta)));
    $distance = acos($distance);
    $distance = rad2deg($distance);
    $distance = $distance * 60 * 1.1515;
    switch($unit) {
        case 'Mi':
            break;
        case 'Km' :
            $distance = $distance * 1.609344;
    }
    return (round($distance,2));
}

Alternativ kann eine Datenbankabfrage verwendet werden:

$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) *
            sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) *
            cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)*
            pi()/180))))*180/pi())*60*1.1515
        ) as distance
        FROM `MyTable`
        HAVING distance >= ".$distance.";

Das obige ist der detaillierte Inhalt vonWie finde ich Punkte innerhalb eines Radius mithilfe von Breiten- und Längengrad?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn