SQL空间连接

12

我有两个表格,一个以点作为地理信息,另一个以多边形作为地理信息。我能够通过以下查询找到单个点所在的多边形(从点表中):

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;

然而,我想在这两个表之间进行连接,并获取每个点所在的多边形。这是否可能?还是我需要循环遍历点表,并多次调用上述查询?

1个回答

18

这应该可以工作:

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(...))",因为这将加速查询。


需要注意的是,这里完全需要 polyTable.Geog.STIntersects(pointTable.Geog) = 1 这一部分。我来自Postgres,并使用此作为示例编写了查询,由于疏忽没有加上 = 1 ,结果非常沮丧,直到我注意到这个细节。 - carusot42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接