2016-05-12 3 views
2

名前、ID、およびジオメトリを含む40個のポリゴンのテーブルがあります。私は2番目のアドレス表を持っています。私はgeometry::UnionAggregateを使って40のポリゴンを集計しました。SQL Serverのポイントを含むリターンポリゴン名2014

多角形のIDは、特に私のアドレステーブルから1点返すことができます。 以下は私のコードですが、40個のポリゴンごとに真の値(1)が得られます。私は39 nullsが実際にポイントを含むポリゴンのために '1'を期待していた。これは今では集約されたポリゴンを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()をして、自分自身にそれを証明する)である1つのポリゴンになります。このように、ポリゴンがあなたのポイントと交差する忠実度を失ってしまいました。個々のポリゴンに対してテストする必要があります。私は次のようにします:

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

ありがとうございました。 – SSingh

関連する問題