我们有一张 table ,上面有地方以及它们的纬度和经度。
我们正在尝试在SQL Server 2008中创建一个函数,以指定的纬度和经度为中心列出下一个25公里以内的地点。
我在徘徊这是否是启动和测试我们的功能以及获取中心点(当前位置)和目标位置(@ latitude/@ longitude)之间的当前距离的好方法:
ALTER FUNCTION [dbo].[GetDistanceFromLocation]
(
@myCurrentLatitude float,
@myCurrentLongitude float,
@latitude float,
@longitude float
)
RETURNS int
AS
BEGIN
DECLARE @radiusOfTheEarth int
SET @radiusOfTheEarth = 6371--km
DECLARE @distance int
SELECT @distance = ( @radiusOfTheEarth
* acos( cos( radians(@myCurrentLatitude) )
* cos( radians( @latitude ) )
* cos( radians( @longitude ) - radians(@myCurrentLongitude) ) + sin( radians(@myCurrentLatitude) )
* sin( radians( @latitude ) ) ) )
RETURN @distance
END
是正确的还是我们缺少了什么?
最佳答案
看来您正在使用great-circle distance公式,尽管您必须对此进行判断,但它可能对您来说足够准确。
如果要检查公式的结果,可以使用geography数据类型:
declare @geo1 geography = geography::Point(@lat1, @long1, 4326),
@geo2 geography = geography::Point(@lat2, @long2, 4326)
select @geo1.STDistance(@geo2)
并且由于您正在执行proximity search,因此您可能需要进一步调查
geography
数据类型。
关于sql-server-2008 - 使用纬度和经度返回SQL Server 2008中两个位置之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489164/