Maison > base de données > tutoriel mysql > Calculer la distance entre la longitude et la latitude de deux points sous SQL SERVER

Calculer la distance entre la longitude et la latitude de deux points sous SQL SERVER

零下一度
Libérer: 2017-05-04 16:10:26
original
2925 Les gens l'ont consulté

Il y a quelques jours, un client a fait une telle demande : un site Web mobile de commande de nourriture, interroger les hôtels dans un rayon de 5 kilomètres de l'emplacement actuel, puis le client peut aller manger.
Après avoir reçu cette demande, je ne savais pas par où commencer. J'y ai réfléchi tranquillement et j'ai ajouté deux champs au tableau de l'hôtel pour stocker la longitude et la latitude de l'hôtel. Lors de la commande d'un repas, le téléphone portable était obligatoire. pour obtenir la longitude et la latitude actuelles de l'emplacement du client sont passées en revue, puis calculées avec la longitude et la latitude de l'hôtel dans la base de données pour le savoir.

Afin d'interroger la distance entre deux points dans la base de données, cette fonction doit être définie dans la base de données.

J'ai longtemps cherché en ligne mais je n'ai pas trouvé cette fonction. Finalement, j'ai résolu ce problème avec l'aide d'un ami sur CSDN. Je suis très reconnaissant à lordbaby de m'avoir fourni cette fonction. J'ai mis cette fonction ici pour aider plus d'amis qui le souhaitent.

Le code est le suivant :

 --计算地球上两个坐标点(经度,纬度)之间距离sql函数  
    --作者:lordbaby  
    --整理:www.aspbc.com   
    CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT  
      AS  
    BEGIN  
      --距离(千米)  
      DECLARE @Distance REAL  
      DECLARE @EARTH_RADIUS REAL  
      SET @EARTH_RADIUS = 6378.137    
      DECLARE @RadLatBegin REAL,@RadLatEnd REAL,@RadLatDiff REAL,@RadLngDiff REAL  
      SET @RadLatBegin = @LatBegin *PI()/180.0    
      SET @RadLatEnd = @LatEnd *PI()/180.0    
      SET @RadLatDiff = @RadLatBegin - @RadLatEnd    
      SET @RadLngDiff = @LngBegin *PI()/180.0 - @LngEnd *PI()/180.0     
      SET @Distance = 2 *ASIN(SQRT(POWER(SIN(@RadLatDiff/2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2), 2)))  
      SET @Distance = @Distance * @EARTH_RADIUS    
      --SET @Distance = Round(@Distance * 10000) / 10000    
      RETURN @Distance  
    END
Copier après la connexion
-跟坐标距离小于5公里的数据  
    SELECT * FROM 商家表名 WHERE dbo.fnGetDistance(121.4625,31.220937,longitude,latitude) < 5
Copier après la connexion

La longitude et la latitude ici sont respectivement les champs de longitude et de latitude de l'hôtel, et 121.4625,31.220937 sont la longitude de l'actuel client obtenu par le téléphone portable, suivi des 5 moyens dans un rayon de 5 kilomètres.

[Recommandations associées]

1. Tutoriel vidéo en ligne MySQL gratuit

2. Dernier tutoriel manuel MySQL

.

3.Chuanzhi Podcast Liu Daocheng MySql series Tutoriels vidéo

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:
sql
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