我想知道是否有一种快速的方法来计算牵引点lat和lng之间的距离我有这个代码但它很慢
SELECT * FROM `hotels` WHERE (SQRT(POW(`lat` - 32.171253 , 2) + POW(`lng` - 35.057362, 2)) * 100) < 1
此返回的点数在1公里左右
提前谢谢
答案 0 :(得分:1)
CREATE FUNCTION dbo.DistanceKMFromLatLong
(
@srcLatitude decimal(9,6),
@srcLongitude decimal(9,6),
@destLatitude decimal(9,6),
@destLongitude decimal(9,6)
)
RETURNS TABLE
AS
RETURN
(
SELECT DistanceKM = ACOS(SIN(PI()*@srcLatitude/180.0)*SIN(PI()*@destLatitude/180.0)+COS(PI()*@srcLatitude/180.0)*COS(PI()*@destLatitude/180.0)*COS(PI()*@destLongitude/180.0-PI()*@srcLongitude/180.0))*6371
)
GO
您可以通过连接到包含源和目标纬度/长度的两个表来使用它,如下所示:
select
p.Latitude,
p.Longitude,
s.Latitude,
s.Longitude,
DistanceFromStoreKMNew = d.DistanceKM
from
Staging.PostcodesToLatLong p
join dbo.Store s on s.StoreId = p.StoreId
cross apply dbo.DistanceKMFromLatLong(p.Latitude, p.Longitude, s.Latitude, s.Longitude) d
您还可以使用半正公式创建一个标量值函数。
如果您希望更快,请创建CLR存储过程。