3

テーブルに複数のポリゴンがあります(ImageId int, Quality float, Border geometry)。

より高性能なT-SQL関数を使用して、ポリゴンのすべての交差を見つけるにはどうすればよいですか?反復せずに、各ポリゴンを各ポリゴンと比較せずに交差点を見つけるのに役立つ関数はありますか、またはそれを行う方法のサンプルはありますか?誰か助けてもらえますか?

4

3 に答える 3

4

私は今これをテストできる場所ではありませんが、空間集計が他の集計 (つまり文字列 + 文字列) のように機能する場合は、これを試してみましょう:

declare @intersection geometry;
select top 1 @intersection = border
from #polygons;

select @intersection = border.STIntersects(@intersection)
from #polygons;

select @intersection.STIsEmpty();

作業を正しく行っていれば、@intersection にはテーブル内のすべてのポリゴンの交差が含まれているはずです。

于 2012-07-26T02:41:46.413 に答える
2

各ポリゴンを他のポリゴンと比較する以外に、それを行うことはできないと思います。

select p1.id, p2.id, p1.border.STIntersects(p2.border)
from #polygons p1
    inner join #polygons p2 on p1.id<p2.id
于 2012-07-25T20:45:37.290 に答える
1

私の基本コードとしてpodiluskaのコードを使用することで、あなたが探しているものを達成しました。ただし、パフォーマンスはあまり高くありません。誰かがより高速なクエリを提供できることを願っています。

select geometry::UnionAggregate(inter_geometry) as intersection_union
from
(
    select p1.id as id1, p2.id as id2, p1.border.STIntersection(p2.border) as inter_geometry
    from #polygons p1
    inner join #polygons p2 on p1.id < p2.id
    where p1.border.STIntersects(p2.border) = 1
) t
where t.inter_geometry.STArea() > 0 --for some cases STIntersects returns 1 but the area is 0

ちなみに UnionAggregate は SQL Server 2012 関数です。

于 2014-04-29T14:59:32.857 に答える