【问题标题】:Calculating distances between two tables full of GEOGRAPHY points计算两个充满 GEOGRAPHY 点的表之间的距离
【发布时间】:2012-12-06 15:57:20
【问题描述】:

我正在使用 SQL Server。

我有两张这样的表:

表 1

Column1, Column2, Column3, GeoLoc
-----------------------------------
a        b        c        0xE61...

表2

Column1, Column2, Column3, GeoLoc 
-----------------------------------
a        b        c        0xE62...

我希望得到一个输出表,它将比较两个表中的所有点,并告诉我table1GeoLoc 位于table2GeoLoc 的X 距离内。

有谁知道该怎么做?一个表有大约 800 行,另一个有大约 300,000 行。我什至不知道从哪里开始......

【问题讨论】:

    标签: sql sql-server sqlgeography


    【解决方案1】:

    假设您的 GeoLoc 列是 SQL Server 中的“地理”数据类型,您应该能够使用如下内容:

    select
      t1.*,
      t2.*,
      t1.GeoLoc.STDistance(t2.GeoLoc) as DistanceApart
    from table1 t1
    join table2 t2
    on (t1.GeoLoc.STDistance(t2.GeoLoc) <= @distanceX)
    

    “DistanceApart”和“distanceX”值以米为单位

    【讨论】:

    • 正要提出同样的建议。 +1
    • 这或多或少是我的做法。我现在已经运行了代码,但显然这需要一段时间才能执行。一旦我知道会发生什么,就会更新问题。
    • 这可能是大量结果数据的结果。假设您指定了所有位置似乎都位于其中的距离。在这种情况下,您将收到包含 800 x 300,000 条记录的输出表。也许您的应用程序业务逻辑使用 TOP 子句或使用另一个条件缩小查询范围就足够了,比如'... and t2.Column1 = t1.Column1'?
    • 所花费的时间/产生的数据集问题都是正确的,但除非您可以应用额外的过滤条件,否则它最终会成为这种情况的某种变体 - 可能需要稍微调整一下更优化的查询计划为它,但仍然主要是这种事情。
    • 对不起,是的,结果以米为单位——我本来是想提一下的(现在更新了一个编辑)
    猜你喜欢
    • 2010-10-30
    • 2021-05-15
    • 2011-04-23
    • 2014-11-14
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多