ST_Unionを使用してArcGIS for DesktopからDissolveと同等の方法を実現するにはどうすればよいですか?


11

PostGISのST_Unionを使用してArcGIS for DesktopのDissolveツールと同等の機能を実現しようとしていますが、期待どおりの結果が得られないようです。

Polygon Geometryの特定の属性を持つテーブルが1つあります。(FID、Locstat、Loccnt、Shapeなど)

私のクエリは次のとおりです。

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

1
期待している結果と得ているものを説明できますか?実行中:SELECT AsText(ST_Union ...)FROM ...は、エラーの検出に役立つ場合があります。
ミカ

テーブルには6842個のレコードがあります。ArcGISの結果によると、クエリを使用すると6842個のレコードが得られる1683個のレコードが得られます。また、ST_Aggr_Unionを試してみました。これは、複数のヌルジオメトリを持つ742レコードを提供します。
ダムズ

回答:


14

問題は、フィールドごとのグループに含まれるものが原因である可能性があります。

ST_UNIONは集約関数です。つまり、GROUPパラメーターとして指定したものに基づいてディゾルブします。

入力した内容は次のとおりです。

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

これによれば、fidおそらく一意の識別子であるによってboundaryshape、またジオメトリであるによってグループ化されます。これに伴う問題は、一意のIDを共有する機能が同一のジオメトリを持つ可能性が非常に低いことです。したがって、ST_Unionおそらく次のような結果になります。

Input:   
fid     boundaryshape  
1         11  
1         12  
1         11  
1         13  
2         12  
2         13  
2         12  
3          5  
3          2  
3          4  

Output:  
fid     boundaryshape  
1        (11 + 11)  
1        12  
1        13  
2        (12 + 12)  
2        13  
3        2  
3        4  
3        5

この場合、削除fidしようとしている同じの重複ジオメトリが実際にいくつかない限り、一意の識別子に基づいてのみディゾルブする必要があります。ただし、そのような状況でも、に基づいてグループ化するだけでよくfid、ユニオンがジオメトリの重複を処理します。

私は次のことを試します:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;

これにより、共通の属性に基づいてすべての機能をディゾルブするという望ましい結果が得られますfid

PostGISサイトのヘルプドキュメントは次のとおりです 。ST_Union

一番下にリストされている最初の例を参照し、セクションごとのグループにジオメトリが含まれていないことに注意してください。


1
場合によっては、結合を行う前にジオメトリをグリッドにスナップする方が適切です。SELECT ST_Union(ST_SnapToGrid(geom、0.0001))FROM geo_area group by level_identifier;
マキシムエリゼエフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.