前些天客戶提出一個(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)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END