Heim > Datenbank > MySQL-Tutorial > SQL SERVER berechnet die Entfernungsfunktion basierend auf dem Längen- und Breitengrad der Karte

SQL SERVER berechnet die Entfernungsfunktion basierend auf dem Längen- und Breitengrad der Karte

大家讲道理
Freigeben: 2016-11-12 09:59:34
Original
1310 Leute haben es durchsucht

Vor ein paar Tagen hat ein Kunde eine solche Anfrage gestellt: eine mobile Website zur Essensbestellung, um Hotels im Umkreis von 5 Kilometern um den aktuellen Standort abzufragen, damit der Kunde essen gehen kann.
Nachdem ich diese Anfrage erhalten hatte, wusste ich nicht, wie ich anfangen sollte, und fügte der Tabelle des Hotels zwei Felder hinzu, um den Längen- und Breitengrad des Hotels zu speichern um den aktuellen Längen- und Breitengrad des Standorts des Kunden zu erhalten, werden diese übergeben und dann mit dem Längen- und Breitengrad des Hotels in der Datenbank berechnet, um dies herauszufinden.

Um den Abstand zwischen zwei Punkten in der Datenbank abzufragen, muss diese Funktion in der Datenbank definiert werden.

Ich habe lange online gesucht, konnte diese Funktion aber nicht finden. Schließlich habe ich dieses Problem mit Hilfe eines Freundes auf CSDN gelöst. Ich bin Lordbaby sehr dankbar, dass er mir diese Funktion zur Verfügung gestellt hat, um mehr Freunden zu helfen, die sie wollen.

--计算地球上两个坐标点(经度,纬度)之间距离sql函数  
 
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
Nach dem Login kopieren


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage