Heim >Datenbank >MySQL-Tutorial >## Wie optimiert man MySQL-Abfragen für genaue Geolocation-Suchen mithilfe von Breiten- und Längengrad?

## Wie optimiert man MySQL-Abfragen für genaue Geolocation-Suchen mithilfe von Breiten- und Längengrad?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 19:52:02465Durchsuche

## How to Optimize MySQL Queries for Accurate Geolocation Searches Using Latitude and Longitude?

Optimieren von MySQL-Abfragen für Geolocation-Suchen mithilfe von Breiten- und Längengraden

In MySQL ist das Abrufen von Daten basierend auf der geografischen Nähe eine häufige Aufgabe. Bei der Arbeit mit Längen- und Breitengradwerten ist es wichtig, effiziente Abfragen zu verwenden, um unerwartete Ergebnisse zu vermeiden.

Betrachten Sie die folgende Abfrage, die versucht, Zeilen innerhalb eines 25-Meilen-Radius um einen mittleren Breiten- und Längengrad zu finden:

<code class="sql">SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` <= 25 ORDER BY `distance` ASC</code>

Obwohl diese Abfrage im Allgemeinen funktioniert, kann sie für einige Zeilen zu ungenauen Ergebnissen führen und diese viel weiter vom angegebenen Radius entfernt anzeigen.

Um die Genauigkeit zu verbessern, ziehen Sie die folgende optimierte Abfrage in Betracht:

<code class="sql">SELECT
    `id`,
    (
        6371 *
        acos(
            cos( radians( :lat ) ) *
            cos( radians( `lat` ) ) *
            cos(
                radians( `long` ) - radians( :long )
            ) +
            sin(radians(:lat)) *
            sin(radians(`lat`))
        )
    ) `distance`
FROM
    `location`
HAVING
    `distance` < :distance
ORDER BY
    `distance`
LIMIT
    25</code>

In dieser Abfrage stellen die Parameter :lat und :long den Breiten- und Längengrad des Mittelpunkts dar, und :distance stellt den Radius in Meilen dar.

Der Hauptunterschied zwischen den beiden Abfragen ist die Verwendung von 6371 als Umrechnungsfaktor zur Umrechnung von Bogenmaß in Meilen. Dieser Faktor ist genauer als 3959, der in der ursprünglichen Abfrage verwendet wird. Darüber hinaus verwendet die optimierte Abfrage eine strengere Formel zur Berechnung der Entfernung basierend auf Breiten- und Längengrad.

Durch die Implementierung dieser Optimierungen können Sie die Genauigkeit Ihrer MySQL-Abfragen erheblich verbessern, wenn Sie Geolokalisierungssuchen anhand von Breiten- und Längengradwerten durchführen. Stellen Sie sicher, dass die Ergebnisse immer innerhalb des angegebenen Radiusabstands liegen.

Das obige ist der detaillierte Inhalt von## Wie optimiert man MySQL-Abfragen für genaue Geolocation-Suchen 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