Maison > base de données > tutoriel mysql > le corps du texte

Exemples de mysql recherchant des données dans un rayon de N kilomètres à proximité

jacklove
Libérer: 2018-06-08 23:16:04
original
2130 Les gens l'ont consulté

En fonction du rapport pi, du coefficient du rayon terrestre ainsi que de la longitude et de la latitude du point de recherche, recherchez des données à moins de N kilomètres du point de recherche dans le tableau de données.

1. Créez un tableau de test

CREATE TABLE `location` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `longitude` decimal(13,10) NOT NULL, `latitude` decimal(13,10) NOT NULL, PRIMARY KEY (`id`), KEY `long_lat_index` (`longitude`,`latitude`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

2. Insérez les données de test

insert into location(name,longitude,latitude) values
('广州东站',113.332264,23.156206),
('林和西',113.330611,23.147234),
('天平架',113.328095,23.165376);mysql> select * from `location`;
+----+--------------+----------------+---------------+| id | name         | longitude      | latitude      |
+----+--------------+----------------+---------------+|  1 | 广州东站      | 113.3322640000 | 23.1562060000 |
|  2 | 林和西        | 113.3306110000 | 23.1472340000 ||  3 | 天平架        | 113.3280950000 | 23.1653760000 |
+----+--------------+----------------+---------------+
Copier après la connexion

3. Recherchez des données dans un rayon de 1 km

Recherchez. points Coordonnées : Times Square 113.323568, 23.146436

6370.996Le kilomètre est le rayon de la terre

Formule pour calculer la distance de coordonnées de deux points sur la sphère

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

Selon la formule de calcul, l'instruction de requête est la suivante :

select * from `location` where (
acos(sin(([#latitude#]*3.1415)/180) * sin((latitude*3.1415)/180) + cos(([#latitude#]*3.1415)/180) * cos((latitude*3.1415)/180) * cos(([#longitude#]*3.1415)/180 - (longitude*3.1415)/180))*6370.996)<=1;
Copier après la connexion

Exécuter le requête :

mysql> select * from `location` where (    -> acos(    -> sin((23.146436*3.1415)/180) * sin((latitude*3.1415)/180) +     -> cos((23.146436*3.1415)/180) * cos((latitude*3.1415)/180) * cos((113.323568*3.1415)/180 - (longitude*3.1415)/180)    -> )*6370.996    -> )<=1;
+----+-----------+----------------+---------------+| id | name      | longitude      | latitude      |
+----+-----------+----------------+---------------+|  2 | 林和西     | 113.3306110000 | 23.1472340000 |
+----+-----------+----------------+---------------+
Copier après la connexion

Cet article explique l'exemple de mysql recherchant des données dans un rayon de N kilomètres à proximité. Pour plus de connaissances connexes, veuillez faire attention au site Web chinois PHP.

Recommandations associées :
Méthode MySQL de reconnexion automatique après interruption de la connexion

php implémente la numérotation des entités HTML et non-ASCII Classe de conversion mutuelle de chaînes

php crée une classe de nombres unique basée sur un identifiant auto-croissant

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!