我是使用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
现在我被卡住了。我的问题是:
希望这一切都有意义。这是ArcGIS中的五分钟手动操作。我想知道如何在SQL中做到这一点。希望有人愿意接受它!我知道我有很多阅读要做。 干杯,谢谢你们到目前为止帮助我的所有信息。
-CM
答案 0 :(得分:1)
回答你的问题:
您的查询几乎正确,只需将STWithin更改为STIntersects即可。这样,返回表A中位于表B中多边形边界内和表面上的所有点。
是的,你是对的。因此,要查找最近的多边形,您需要最近邻居查询。
选择 表A *, fnc.id 来自TableA 交叉申请( SELECT TOP 1 id 从TableB 表WhereA.Location.STDistance(TableB.Polygon)不是NULL ORDER BY TableA.Location.STDistance(TableB.Polygon)ASC )fnc;
我希望这会有所帮助。 :)
修改强> 差点忘了。最近邻居查询来自https://alastaira.wordpress.com/2012/02/22/updating-a-sql-server-table-with-nearest-neighbours-optimised-for-sql-server-2012-sql-azure/ 我只是修改查询以匹配您的架构。