数日前、お客様から次のようなリクエストがありました。モバイル食品注文ウェブサイトで現在地から 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キロ。
【関連おすすめ】
3. Chuanzhi Podcast Liu Daocheng MySqlシリーズのビデオチュートリアル
以上がSQL SERVER で 2 点の経度と緯度の間の距離を計算します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。