SQL SERVER 根據(jù)地圖經(jīng)緯度計(jì)算距離函數(shù)

前些天客戶提出一個(gè)這樣的要求:一個(gè)手機(jī)訂餐網(wǎng),查詢當(dāng)前所在位置的5公里范圍的酒店,然后客戶好去吃飯。
拿到這個(gè)請(qǐng)求后,不知道如何下手,靜靜地想了一下,在酒店的表中增加兩個(gè)字段,用來(lái)存儲(chǔ)酒店所在的經(jīng)度和緯度,當(dāng)訂餐的時(shí)候,要求手機(jī)得到當(dāng)前客戶所在的經(jīng)度和緯度傳過(guò)來(lái),再與數(shù)據(jù)庫(kù)中酒店的經(jīng)度和緯度計(jì)算一下,就查出來(lái)。

為了在數(shù)據(jù)庫(kù)中查詢兩點(diǎn)之間的距離,所以這個(gè)函數(shù)需要在數(shù)據(jù)庫(kù)中定義。

我網(wǎng)上找了很久,卻沒(méi)有找到這個(gè)函數(shù)。最后在CSDN上,一個(gè)朋友的幫助下解決了這個(gè)問(wèn)題,非常感謝lordbaby給我提供這個(gè)函數(shù),我把這個(gè)函數(shù)放到這里來(lái),以便幫助更多許要的朋友。

--計(jì)算地球上兩個(gè)坐標(biāo)點(diǎn)(經(jīng)度,緯度)之間距離sql函數(shù)??  ?  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
? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享