【问题标题】:Select data based on calculated distance between coordinates根据计算的坐标之间的距离选择数据
【发布时间】:2014-03-31 08:00:44
【问题描述】:

数据库存储 4 个坐标点,如下所示:

姓名 |纬度 |长

第 1 点 | 11.111 | 22.222

第 2 点 | 22.222 | 33.333

第 3 点 | 44.444 | 55.555

第 4 点 | 66.666 | 77.777


技术:

MS SQL 服务器


Web 应用程序通过 HTML5 获取当前用户的纬度和经度,然后它应该计算这 4 个点中的哪些点更接近 0.5 公里。 如何?

应根据此图显示点 1 和点 2:

【问题讨论】:

  • 接近0.5公里是什么意思?是不是两点之间的距离小于0.5km?
  • @magnusw 是的,完全正确

标签: sql-server-2008 coordinates


【解决方案1】:

您需要将您的点转换为地理数据类型。然后你可以做一个 WHERE @here.STDistance(testPoint)

使用地理点计算距离的基础知识可以在this question找到。

【讨论】:

    【解决方案2】:

    使用 Sql 服务器:

    您可以以千米为单位计算两个坐标之间的距离,使用以下函数

    CREATE FUNCTION dbo.fnCalcDistanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)
        RETURNS FLOAT 
        AS
        BEGIN
    
            RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371
        END
    

    示例用法:

    select [dbo].[fnCalcDistanceKM](13.077085,80.262675,13.065701,80.258916)
    

    Reference

    使用实体框架(点网):

    Entity framework 5.0 允许你写这样的 LINQ 表达式

    private Facility GetNearestFacilityToJobsite(DbGeography jobsite)
    {   
        var q1 = from f in context.Facilities            
                 let distance = f.Geocode.Distance(jobsite)
                 where distance < 500 * 1609.344     
                 orderby distance 
                 select f;   
        return q1.FirstOrDefault();
    }
    

    Reference

    我希望这足以让你开始。

    【讨论】:

      猜你喜欢
      • 2016-10-28
      • 1970-01-01
      • 2014-04-06
      • 2021-09-08
      • 2020-06-02
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多