Ein einfaches Beispiel für die MySQL-Suche nach Daten im Umkreis von N Kilometern

Ein einfaches Beispiel für die MySQL-Suche nach Daten im Umkreis von N Kilometern

Gemäß dem Koeffizienten von Pi und dem Radius der Erde sowie dem Längen- und Breitengrad des Suchpunkts beträgt die Entfernung zwischen dem Suchpunkt und der Suchdatentabelle N Kilometer.

1. Erstellen Sie eine Testtabelle

CREATE TABLE `Standort` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NICHT NULL,
 `Längengrad` Dezimalzahl (13,10) NICHT NULL,
 `Breitengrad` Dezimalzahl(13,10) NICHT NULL,
 Primärschlüssel (`id`),
 SCHLÜSSEL `long_lat_index` (`Längengrad`,`Breitengrad`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

2. Testdaten einfügen

in Standortwerte (Name, Längengrad, Breitengrad) einfügen
('Guangzhou Ostbahnhof',113.332264,23.156206),
('Lin Hexi',113.330611,23.147234),
('Waage',113.328095,23.165376);

mysql> wählen Sie * aus „Standort“;
+----+--------------+----------------+---------------+
| ID | Name | Längengrad | Breitengrad |
+----+--------------+----------------+---------------+
| 1 | Ostbahnhof Guangzhou | 113.3322640000 | 23.1562060000 |
| 1 | Linhexi | 113,3306110000 | 23,1472340000 |
| 3 | Waagerahmen | 113,3280950000 | 23,1653760000 |
+----+--------------+----------------+---------------+

3. Suche nach Daten im Umkreis von 1 km

Suchpunktkoordinaten: Times Square 113.323568, 23.146436

6370,996 km ist der Radius der Erde

Formel zur Berechnung des Koordinatenabstands zwischen zwei Punkten auf einer Kugel

C = sin(MLatA)sin(MLatB)cos(MLonA-MLonB) + cos(MLatA)cos(MLatB) 
Entfernung = RArccos(C)*Pi180

Gemäß der Berechnungsformel lautet die Abfrageanweisung wie folgt:

Wählen Sie * von „Standort“, wobei (
acos(
sin(([#Breitengrad#]*3,1415)/180) * sin((Breitengrad*3,1415)/180) + 
cos(([#Breitengrad#]*3,1415)/180) * cos((Breitengrad*3,1415)/180) * cos(([#Längengrad#]*3,1415)/180 - (Längengrad*3,1415)/180)
)*6370,996
)<=1;

Führen Sie die Abfrage aus:

mysql> select * from `location` wobei (
  -> acos(
  -> sin((23.146436*3.1415)/180) * sin((Breitengrad*3.1415)/180) + 
  -> cos((23,146436*3,1415)/180) * cos((Breitengrad*3,1415)/180) * cos((113,323568*3,1415)/180 - (Längengrad*3,1415)/180)
  -> )*6370.996
  -> )<=1;
+----+-----------+----------------+---------------+
| ID | Name | Längengrad | Breitengrad |
+----+-----------+----------------+---------------+
| 1 | Linhexi | 113,3306110000 | 23,1472340000 |
+----+-----------+----------------+---------------+

Das obige einfache Beispiel einer MySQL-Datensuche im Umkreis von N Kilometern ist alles, was ich mit Ihnen teilen möchte. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

<<:  Drei Möglichkeiten zum Konfigurieren virtueller Nginx-Hosts (basierend auf Domänennamen)

>>:  vue verwendet Ele.me UI, um die Filterfunktion von Teambition zu imitieren

Artikel empfehlen

Analyse und Lösung des durch Chrome 73 verursachten Flex-Layout-Zusammenbruchs

Phänomen Es gibt mehrere verschachtelte Flex-Stru...

MySQL-Datenmigration mit dem Befehl MySQLdump

Die Vorteile dieser Lösung liegen in der Einfachh...

Ideen und Codes zur Implementierung der Vuex-Datenpersistenz

Was ist Vuex vuex: ist ein speziell für vue.js en...

So verwenden Sie vite zum Erstellen einer Vue3-Anwendung

1. Installation Tipp: Derzeit gibt es kein offizi...

Vue3 (Teil 2) Integration von Ant Design Vue

Inhaltsverzeichnis 1. Integrieren Sie Ant Design ...

Beispiel für die Mosaikierung eines Bildes mit js

Dieser Artikel stellt hauptsächlich ein Beispiel ...

Installation und Verwendung der Ubuntu 18.04 Serverversion (Bild und Text)

1 Schritte zur Systeminstallation Betriebssystemv...

XHTML verwendet einige veraltete Elemente in HTML nicht mehr

Wenn wir CSS-Webseitenlayouts erstellen, wissen wi...

Der Aufruf der Suchmaschine auf der Seite erfolgt am Beispiel von Baidu

Heute ist mir plötzlich eingefallen, dass es cool ...

Eine Zusammenfassung der Fuzzy-Abfrage von MySQL wie

1. Allgemeine Verwendung: (1) Mit % verwenden % s...