5

SQL Server 2008には多くのPolygonsデータ型がありGeometryます。下の画像は、これらすべてのジオメトリの選択がどのように視覚化されているかを示しています。

多くのジオメトリ

私がする必要があるのは、これらすべてのポリゴンの外側の境界を表す Polygon を作成することです。そこで、以前の空間に関する質問に対する回答を使用して、次のコードを作成しました。

DECLARE @test TABLE(geom GEOMETRY);

INSERT INTO @test SELECT geom FROM ForceBoundary

DECLARE @geom GEOMETRY
SELECT @geom = (SELECT TOP 1 geom FROM @test)
SELECT @geom = @geom.STUnion(geom) FROM @test

SELECT @geom

これにより、次の結果が生成されました。これには、ポリゴン間の穴が原因でクラックが含まれています。

ひび割れのある複合ポリゴン

そこで、次の変更でクエリを更新しました。

INSERT INTO @test SELECT geom.Reduce(0.001).STBuffer(100) FROM ForceBoundary

これにより結果は改善されましたが、問題が完全に解決されるわけではなく、外側の境界の精度も損なわれます。

ひび割れの少ない結合ポリゴン

これを達成する正しい方法は何ですか?STxxxx 関数のリストを調べたところ、必要な結果が得られると思われる関数が見つかりませんでした。

4

2 に答える 2

2

GIS StackExchangegeographikaが提供する回答:

sliversを削除したいようです。SQL Server Spatial ToolsプロジェクトのFilterArtifactsGeometryには、このための関数があります。

この機能の使用に関するブログ投稿は、ここにあります。

これには、ringToleranceパラメータを使用して小さなポリゴンを除外するオプションがあります。

指定された許容値よりも薄いすべてのポリゴン リングを削除します (例: ring.STArea < ringTolerance x ring.STLength)。値を 0 にすると、リングは削除されません。

実際には、これにより、非常に薄いポリゴン リング (スライバー) を検出して削除し、より一般的な形状のポリゴン リングだけを残すことができます。もちろん、スライバーは望ましくないが、非スライバー リングが望ましいという前提があります。

于 2011-12-05T13:22:56.473 に答える
0

[geom].SExteriorRing() コマンドを試しましたか?

于 2011-12-01T12:27:24.497 に答える