查找一个表中的哪些点位于另一个表中的多边形中

时间:2015-10-23 22:08:41

标签: sql-server tsql spatial-query

我有一张桌子,这是我的观点

create table t ( 
  PointID bigint 
 ,lat varchar(9)
 ,long varchar(9)
 ,geom geometry 
 ,PolygonID bigint 
); 

我有桌子p是我的多边形

create table p ( 
 PolygonID bigint 
 ,geom geometry 
); 

现在我需要像

这样的东西
;with polygon_cte as p 
(select geom from p) 

UPDATE t 
SET t.PolygonID = p.PolygonID 
WHERE p.geom.STContains(t.geom) 

我确定我的点和多边形已经转换成正确的,我知道我需要添加一个空间索引一旦我有这个但我无法弄清楚如何用右边更新我的点数表我的多边形表中的PolygonID。每个点只有一个多边形,因为多边形在地理区域方面是互斥的。

1 个答案:

答案 0 :(得分:2)

试试这个:

UPDATE p SET PolygonID=(SELECT PolygonID FROM t WHERE t.geom.STContains(p.geom)=1)

如果同一点有多个多边形,您将得到一个"子查询返回的值超过1"错误。