Heim  >  Artikel  >  Datenbank  >  Berechnen Sie den Abstand zwischen Längen- und Breitengrad zweier Punkte unter SQL SERVER

Berechnen Sie den Abstand zwischen Längen- und Breitengrad zweier Punkte unter SQL SERVER

零下一度
零下一度Original
2017-05-04 16:10:262886Durchsuche

Vor ein paar Tagen hat ein Kunde eine solche Anfrage gestellt: eine mobile Website zur Essensbestellung, Hotels im Umkreis von 5 Kilometern um den aktuellen Standort abfragen , und dann kann der Kunde essen gehen.
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.

Der Code lautet wie folgt:

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

Die Längen- und Breitengrade sind hier jeweils die Längen- und Breitengrade des Hotels, und 121.4625,31.220937 sind die aktuellen Längengrade Kunde erhält per Mobiltelefon, gefolgt von Die 5 bedeutet innerhalb von 5 Kilometern.

[Verwandte Empfehlungen]

1. Kostenloses MySQL-Online-Video-Tutorial

2. Neuestes MySQL-Handbuch-Tutorial

3.Chuanzhi Podcast Liu Daocheng MySql-Serie Video-Tutorials

Das obige ist der detaillierte Inhalt vonBerechnen Sie den Abstand zwischen Längen- und Breitengrad zweier Punkte unter SQL SERVER. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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