ホームページ  >  記事  >  データベース  >  SQL SERVER で 2 点の経度と緯度の間の距離を計算します。

SQL SERVER で 2 点の経度と緯度の間の距離を計算します。

零下一度
零下一度オリジナル
2017-05-04 16:10:262884ブラウズ

数日前、お客様から次のようなリクエストがありました。モバイル食品注文ウェブサイトで現在地から 5 キロ以内のホテルをクエリし、その後、お客様は食事に行くことができます。
このリクエストを受け取った後、どうやって始めればよいのかわかりませんでした。私は静かに考え、ホテルの経度と緯度を保存するフィールドを 2 つ追加しました。食事を注文するときに携帯電話で取得する必要があります。現在の顧客の位置が渡され、データベース内のホテルの経度と緯度を使用して計算されます。

データベース内の 2 点間の距離をクエリするには、この 関数 をデータベースで定義する必要があります。

ネットで長い間探しましたが、この機能は見つかりませんでした。最後に、CSDN の友人の助けでこの問題を解決しました。この機能を提供してくれた lordbaby に非常に感謝しています。この機能を必要とするより多くの友人を助けるためにここに追加しました。

コードは次のとおりです:

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

ここでの経度と緯度はそれぞれホテルの経度フィールドと緯度フィールドで、121.4625,31.220937は携帯電話で取得した現在の顧客の経度であり、次の5つは以内を意味します5キロ。

【関連おすすめ】

1. 無料のmysqlオンラインビデオチュートリアル

2. MySQLの最新マニュアルチュートリアル

3. Chuanzhi Podcast Liu Daocheng MySqlシリーズのビデオチュートリアル

以上がSQL SERVER で 2 点の経度と緯度の間の距離を計算します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。