我有2张 table ,一张 table 以点为地理,另一张 table 以多边形为地理。我可以通过以下查询找到单个点(从点表中)落入哪个多边形:

DECLARE @p geography;
select @p = PointGeom from dbo.PointTable where ID = 1
SELECT  a.ID, ATTRIBUTE1, geom
from dbo.PolygonTable  a
where geom.STIntersects(@p) = 1;

但是,我想在两个表之间进行联接,并获得点表中每个点所处的多边形。可能吗?还是我需要遍历Point表并多次调用上述查询?

最佳答案

这应该工作:

SELECT
    polyTable.[PolygonID]
,   pointTable.[PointID]
FROM
[PolygonTable_Name] polyTable WITH(INDEX([SPATIAL_INDEX_NAME]))
INNER JOIN
[PointTabl_Name] pointTable
ON
polyTable.Geog.STIntersects(pointTable.Geog) = 1

我添加了索引提示“WITH(INDEX(...))”,因为这将加快查询速度。

关于SQL空间连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7655408/

10-11 11:27