Maison  >  Article  >  base de données  >  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

零下一度
零下一度original
2017-05-04 16:10:262812parcourir

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
-跟坐标距离小于5公里的数据  
    SELECT * FROM 商家表名 WHERE dbo.fnGetDistance(121.4625,31.220937,longitude,latitude) < 5

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!

Déclaration:
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