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

Posted

技术标签:

【中文标题】使用纬度和经度返回 SQL Server 2008 中两个位置之间的距离【英文标题】:Return distance between two locations in SQL Server 2008 using latitude and longitude 【发布时间】:2011-11-21 07:05:44 【问题描述】:

我们有一张表格,上面有地点及其经纬度。

我们正在尝试在 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

是正确的还是我们遗漏了什么?

【问题讨论】:

【参考方案1】:

看起来您正在使用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 数据类型。

【讨论】:

什么是 4326?我试图查看 MSDN,但没有任何相关信息。 4326 是世界大地参考系统的空间参考 ID。有关详细信息,请参阅 technet.microsoft.com/en-us/library/bb933811.aspx en.wikipedia.org/wiki/SRID 和 en.wikipedia.org/wiki/WGS84【参考方案2】:

这有效吗?

CREATE FUNCTION [dbo].[GetDistanceFromLocation]
(   
    @CurrentLatitude float,
    @CurrentLongitude float,
    @latitude float,
    @longitude float
)
RETURNS int
AS
BEGIN
    DECLARE @geo1 geography = geography::Point(@lat1, @long1, 4268), 
            @geo2 geography = geography::Point(@lat2, @long2, 4268)

    DECLARE @distance int
    SELECT @distance = @geo1.STDistance(@geo2) 

    RETURN @distance

END

谢谢!

【讨论】:

欢迎来到 Stack Overflow!这实际上是评论,而不是答案。多一点代表,you will be able to post comments。我正在标记这篇文章以供删除。

以上是关于使用纬度和经度返回 SQL Server 2008 中两个位置之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中使用纬度和经度查找两点之间的距离

用于查找使用纬度和经度之间的距离的Sql返回错误的距离

在 SQL Server 数据库中平均纬度/经度

SQL Server 2008 复杂查询和表连接

在 SQL Server 中查找多边形内/最近的纬度/经度

SQL Server 计算 2 组纬度/经度列之间的距离