2016-05-12 173 views
2

我有一個包含40個多邊形的表格,它們包含名稱,ID和幾何圖形。我有第二個地址表,它以自己的幾何圖形表示爲點。我使用geometry::UnionAggregate彙總了40個多邊形。返回包含SQL Server 2014中的點的多邊形名稱

我希望能夠從我的地址表中返回一個點的多邊形的ID。 以下是我的代碼,但對於40個多邊形中的每一個,我都得到了一個真值(1)。我期待39 nulls和'1'的實際包含點的多邊形。這是因爲它現在將聚合多邊形當作一個實體來處理,因此它們都包含了這一點?

我是新來的空間查詢,可能會失去一些盲目顯而易見的東西,但希望得到一些幫助。

declare @n geometry 
set @n = (select geometry::UnionAggregate(sp_geometry) from Polygons) 
declare @p geometry 
set @p = (select sp_geometry from PointData); 

select n.id from Polygons n, pointdata p 
where @n.MakeValid().STWithin(@p) = 1 

回答

1

的UnionAggregate將是一個多角形的所有表格中的多邊形(做@n.ToString()和證明給自己)的聯盟。因此,你失去了多邊形與你的點相交的保真度。您需要針對各個多邊形進行測試。我會這樣做:

select * 
from dbo.Polygons as poly 
join dbo.PointData as point 
    on poly.STIntersectects(point.sp_geometry) = 1; 
+0

謝謝本感謝您的答案,正是我想要的回報! – SSingh