如題,下面是最初版的sql,取與目標座標150千公尺範圍內的記錄
select top 10 * from t_temple a with(nolock) where dbo.[fngetdistance](37.356976,116.8425,lat,lon)<150 order by a.id asc
因為我們知道,如果要與目標座標在150公里,所以經緯度應該在目標座標點的正負2度範圍內(粗略這麼認為啊),所以加上乙個前提條件,如下:
select top 10 * from t_temple a with(nolock) where lat between 37.356976-2 and 37.356976+2 and lon between 116.8425-2 and 116.8425+2 and dbo.[fngetdistance](37.356976,116.8425,lat,lon)<150 order by a.id asc
這樣的話,相比於方案1,方案2還是有效能上的提公升,特別是t_temple表記錄比較多時,可在lat,lon上可以建立座標。
附上ms sql 版的fngetdistance
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,4) / 10000
return @distance
end
PHP計算座標距離
php 計算兩點地理座標之間的距離 param decimal longitude1 起點經度 param decimal latitude1 起點緯度 param decimal longitude2 終點經度 param decimal latitude2 終點緯度 param int unit...
mysql 座標查詢計算距離
6378.138這個是地球的直徑,單位千公尺.latitude是使用者位置的緯度,longitude是使用者位置經度.latitude 為商戶的緯度字段,longitude為商戶的經度字段。上面一段sql計算得出根據使用者經緯度計算與商戶的距離。30.5821398542,select round ...
基於距離的計算方法
1.歐氏距離 euclidean distance 歐氏距離是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。1 二維平面上兩點a x1,y1 與b x2,y2 間的歐氏距離 2 三維空間兩點a x1,y1,z1 與b x2,y2,z2 間的歐氏距離 3 兩個n維向量a x11,x12...