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

Linux verwendet den Befehl lsof, um den Status des Dateiöffnens zu überprüfen

Vorwort Wir alle wissen, dass unter Linux „alles ...

Blog-Design Webdesign-Debüt

Die erste Webseite, die ich entworfen habe, sieht...

Lassen Sie uns ausführlich über die gemeinsame MySQL-Abfrage sprechen

Inhaltsverzeichnis Union-Abfrage 1. Fragen Sie di...

SVG+CSS3 zum Erzielen eines dynamischen Welleneffekts

Eine Vektorwelle <svg viewBox="0 0 560 20...

Ein Artikel, der Ihnen hilft, jQuery-Animationen zu verstehen

Inhaltsverzeichnis 1. Steuern Sie die Anzeige und...

Implementierung von zwei Basis-Images für die Docker-Bereitstellung von Go

1. golang:neuestes Basis-Image mkdir gotest Berüh...

MySQL-Abfragedaten für heute, diese Woche, diesen Monat und letzten Monat

Heute Wählen Sie * aus Tabellenname, wobei to_day...

Tutorial zum Zurücksetzen des Root-Passworts von Mac MySQL

Haftungsausschluss: Mit dieser Methode zum Zurück...

So erstellen Sie einen Nginx-Image-Server mit Docker

Vorwort Bei der allgemeinen Entwicklung werden Bi...

Webdesign-Tutorial (2): Über Nachahmung und Plagiat

<br />Im vorherigen Artikel habe ich die Sch...