【问题标题】:Querying GPS Coordinates查询 GPS 坐标
【发布时间】:2012-04-20 08:18:30
【问题描述】:

我想用 sql server 2008 构建包含 gps 坐标列的数据库-

latitude 

longitude

我想构建一个类似于以下内容的查询:

"Give me all rows that are within 5(for example) metres of this coordinate"

在c#中可以吗??

【问题讨论】:

    标签: c# .net sql sql-server


    【解决方案1】:

    C# 真的不是问题,问题是数据库本身。 MS SQL Server 2008 及更高版本具有本文所述的空间支持:

    http://msdn.microsoft.com/en-us/magazine/dd434647.aspx

    如果不使用空间扩展,您必须自己手动计算边界框(其中可能包括距离坐标 > 5 米的点。)然后您必须限制结果以确保它们在 5 米范围内的问题。

    这是手动计算的小图片(即有点痛苦):

    ---------------------
    |        ^          |
    |     +5m lat       |
    |                   |
    |-5m lon *   +5m lon|
    |                   |
    |     -5m lat       |
    |        v          |
    ---------------------
    

    (*) 是问题所在。手动计算的问题是靠近盒子角落的点(可能)距离 (*) 点 > 5 m。您可以计算边界圆,但这会增加 SQL 查询的复杂性。

    所以——简而言之——你真的需要一个支持空间的数据库。

    【讨论】:

    • 你有什么推荐的教程吗?
    • 在他发布的链接中滚动,它解释了如何找到另一个点的给定范围内的点。
    【解决方案2】:

    如果你只有 lats 和 longs,它会有点慢,但是这样的查询应该可以做到:

    select latitude, longitude where (latitude - @lat)^2 + (longitude - @long)^2 <= @dist

    @lat 和@long 是坐标,@dist 是允许的最大距离。

    编辑:Debracey 和我认为合并我们的两种技术可能更有效。因此,首先您将使用边界框进行查询,这是一个非常快速的计算,然后您将获取通过边界框测试的(希望更小)样本并针对我的查询进行测试。

    【讨论】:

    • 这是一个有趣的方法,没想到。
    • 现在我想到了这两种方法的混合可能更有效。您可以通过减少列表的方法快速估算,然后通过此方法运行剩余的成员。
    • 是的,您可以将边界框放入以限制数据库必须执行的计算次数。这实际上是一个非常好的答案......太糟糕了,我不能再次投票......
    【解决方案3】:

    我知道这是 MySQL,但 1. 地球不是平的 2. 你想要圆形,而不是方形...... @radius 应该以公里为单位,5 米太精确了...... 1 度 大约是 111.2 公里(我的假设)。如果您想要里程,请将其更改为 69http://en.wikipedia.org/wiki/Latitude#Meridian_distance_on_the_sphere

    SELECT *, 
    (SQRT(POW((lat - @lat), 2) + POW((lon - @lon), 2)) * 111.2) AS radius 
    FROM table 
    WHERE POW((lat - @lat), 2) + POW((lon - @lon), 2) < POW((@radius / 111.2), 2) 
    ORDER BY radius ASC
    

    我用这个公式来计算附近的雷达检查点...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多