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

时间:2014-02-11 20:50:57

标签: sql sql-server spatial

我是使用SQL Server 2012的初学者。我想确定一个数据库中表A中的一组lat / long是否属于另一个数据库的表B中的多边形;或者是那些纬度/长度最接近的多边形。我之前已经问过这个问题,但是我可以在这个独特的场景中使用一些指导。

表A包含两组位置数据 - 一组是使用第一组lat / long创建的几何的一列;第二组位置数据由两列组成,其中包含第二组纬度/经度的纬度/经度地理值。希望有道理。基本上是三列:几何,纬度,经度

表B包含几何格式的多边形。

我已经能够使用表B的几何列上的表A中的几何列进行空间连接:

SELECT  
    TableB.ID
    ,TableA.*

FROM    
    TableB JOIN TableA ON TableA.geometry_column.STWithin(TableB.geometry_column)=1

现在我被卡住了。我的问题是:

  1. 如何将表A中的地理纬度/长度与表B的几何列相匹配?我知道我需要转换,但是哪种方式?我是否使用转换后的数据创建临时表?
  2. 我假设我可以使用STIntersect或STWithin来查找多边形中的纬度/长度;是否有一个操作来找到最接近lat / longs的多边形?
  3. 如何在查询中嵌入不同的选择,以便按照TableB ID分组我的结果来吐出单个表?理想情况下,我希望看到具有相应TableA几何的TableB ID,表A中的Lat / Longs和最近的表A纬度/长度。
  4. 希望这一切都有意义。这是ArcGIS中的五分钟手动操作。我想知道如何在SQL中做到这一点。希望有人愿意接受它!我知道我有很多阅读要做。 干杯,谢谢你们到目前为止帮助我的所有信息。

    -CM

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 您的查询几乎正确,只需将STWithin更改为STIntersects即可。这样,返回表A中位于表B中多边形边界内和表面上的所有点。

  2. 是的,你是对的。因此,要查找最近的多边形,您需要最近邻居查询。

    选择 表A *, fnc.id 来自TableA 交叉申请( SELECT TOP 1 id 从TableB 表WhereA.Location.STDistance(TableB.Polygon)不是NULL ORDER BY TableA.Location.STDistance(TableB.Polygon)ASC )fnc;

  3. 您必须单独执行步骤1和2并将其收集到临时表中。
  4. 我希望这会有所帮助。 :)

    修改 差点忘了。最近邻居查询来自https://alastaira.wordpress.com/2012/02/22/updating-a-sql-server-table-with-nearest-neighbours-optimised-for-sql-server-2012-sql-azure/ 我只是修改查询以匹配您的架构。