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

Posted

技术标签:

【中文标题】在 SQL Server 中查找多边形内/最近的纬度/经度【英文标题】:Finding lat/longs within/nearest to polygon in SQL Server 【发布时间】:2014-02-11 20:50:56 【问题描述】:

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

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

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

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

SELECT  
    TableB.ID
    ,TableA.*

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

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

    如何将表 A 的地理纬度/经度与表 B 的几何列匹配?我知道我需要转换,但哪种方式?我是否使用转换后的数据创建一个临时表? 我假设我可以使用 STIntersect 或 STWithin 来查找多边形中的纬度/经度;有没有一种操作可以找到最接近纬度/经度的多边形? 如何在我的查询中嵌入不同的选择,以便吐出一个表,我的结果按 TableB ID 分组?理想情况下,我希望看到 TableB ID 与对应的 TableA Geometry、Table A Lat/Longs inside 以及 Table A lat/longs 最接近。

希望这一切都有意义。这是 ArcGIS 中的五分钟手动操作。我想知道如何在 SQL 中做到这一点。希望有人愿意破解它!我知道我有很多阅读要做。 干杯,并感谢您提供到目前为止对我有帮助的所有信息。

-CM

【问题讨论】:

【参考方案1】:

回答你的问题:

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

    是的,你是对的。所以要找到最近的多边形,你需要最近邻查询。

    选择 表A.*, fnc.id 从表 A 交叉申请( 选择前 1 个 ID 从表 B 哪里 TableA.Location.STDistance(TableB.Polygon) 不为空 ORDER BY TableA.Location.STDistance(TableB.Polygon) ASC ) fnc;

    您必须分别执行第 1 步和第 2 步,并将其收集到临时表中。

我希望这会有所帮助。 :)

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

【讨论】:

以上是关于在 SQL Server 中查找多边形内/最近的纬度/经度的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中查找最近的日期

地理围栏:使用 oracle 空间查找多边形内的要素数量(点/线/多边形)

sql语句如何查找在一段时间内没有交易记录的用户

SQL Server:查找学生在自定义日期内的连续缺勤计数

在 OpenCV 中查找多边形边界内的平均颜色

Sql Server 查找下一个最近更改的记录