加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2008 – 使用纬度和经度返回SQL Server 2008中两个位

发布时间:2020-12-12 08:50:55 所属栏目:MsSql教程 来源:网络整理
导读:我们有一张桌子,里面有地方,有纬度和经度. 我们正在尝试在SQL Server 2008中创建一个函数,使用特定的纬度和经度作为中心点列出未来25公里内的位置. 如果这是一个很好的方法来启动和测试我们的功能并获得中心点(当前位置)和目标位置(@纬度/经度)之间的当前距离
我们有一张桌子,里面有地方,有纬度和经度.

我们正在尝试在SQL Server 2008中创建一个函数,使用特定的纬度和经度作为中心点列出未来25公里内的位置.

如果这是一个很好的方法来启动和测试我们的功能并获得中心点(当前位置)和目标位置(@纬度/经度)之间的当前距离,我就会徘徊:

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,因此您可能需要进一步调查地理数据类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读