sql-server-2008 - 使用纬度和经度返回SQL Server 2008中两个位置之间的距离

标签 sql-server-2008 function location

我们有一张 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/

相关文章:

ios - 从 Parse 查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?

iphone - iPhone 中的角度和距离坐标

sql-server-2008 - 如何使用 TOP 并有条件地忽略 UNION ALL?

sql-server - 是否可以防止在没有 WHERE 子句的情况下执行 UPDATE 或 DELETE 语句?

c - 使用递归函数反转字符串

c - 为什么我的递归函数的输出是错误的?

tsql - 如何使用EXCEPT插入静态表?

sql - 创建一个触发器,它将在更新另一个表时将记录插入表中

javascript - javascript 中的奇怪示例,为什么我无法通过函数的参数重新分配全局变量的值?

android - 根据当前位置和某个位置之间的距离更改 LocationRequest 的间隔