postgisでスペース分割をスピードアップする方法は?


9

重複しているポリゴンがたくさんあり、重複しているポリゴンを避けるためにスペースを分割しようとしています。私の問題はかなり単純だと思います。一部のESRI製品とhttp://arcscripts.esri.com/details.asp?dbid=16700を使用して、同僚が48秒で計算しました。

私はhttp://s3.opengeo.org/postgis-power.pdf#page=24を使用してpostgisでそれをやろうとしています(http://trac.osgeo.org/postgis/wiki/UsersWikiSimplifyPreserveTopologyを使用して詳細を推測しています)インスピレーションとして)しかし、非常に遅いので、10個を超えるポリゴンでは実行できません(分割するポリゴンが800個あります)。遅い部分はST_Unionです。私はさまざまなことを試しましたが、成功したものはありません。現在の状況は次のとおりです。

select geom from
(select st_linemerge(st_union(geom)) as geom from
    (select st_exteriorring((st_dumprings((st_dump(t.geom)).geom)).geom) as geom from
        (SELECT geometry AS geom, id
               FROM tt
              WHERE campaign_id = 204
              ORDER BY id limit 200) t) t2) t3

これは26分間計算されています(linemerge()は実際にはそうではありません)。st_dumpでバグが発生する場合に備えて、ポリゴンはマルチポリゴンです。

ヒントはありますか?ラインワークのst_union()は非常に遅い部分です。

おかげで、

ニコ。

PS:ここにいくつかの数字があります:852マルチポリゴン、14880ポリゴン、21467ラインストリング、合計315513頂点。


誰も答えない場合は、postGISメーリングリストを試すことをお勧めします。
GIS-ジョナサン

私はメーリングリストのファンではありません。また、GEOSの問題である可能性もあり、JTSについて不満を言うかもしれません。
nraynaud

ラインワークを収集し、空のジオメトリでユニオンを実行することにより、800秒でそれを行うことができます:st_union(st_collect(geom)、st_setsrid(geomfromtext( 'POINT EMPTY')、900913))これは、ESRIのものよりもほぼ20倍遅いです。
nraynaud

1
メモリから、効果がある場合はst_linemerge(st_union ...)からst_unionを削除してみてください
simplexio

回答:


3

この回答は@nraynaudに直接役立つものではないかもしれませんが、うまくいけば、この主題に光を当てることができます。

GEOSの問題により、spatiaLite <4.0にも同様の問題があります。この問題の説明については、このリンクを参照してください。

回避策は、ST_Union()関数をST_UnaryUnion(ST_Collect())に置き換えることです。残念ながら、ST_UnaryUnionはpostGIS 2.0まで利用できません(私の知る限り)。


1

どのバージョンのPostGISを使用していますか?PostGIS <1.4またはGEOS <3.2を使用している場合、結合ははるかに遅くなります。1.4ではより高速なユニオンが導入されましたが、GEOS 3.2以降も必要です。したがって、最初に1.4未満を使用している場合は、少なくとも1.5にアップグレードします。

SELECT postgis_full_version();

チェックする。

ポリゴンの元のエッジを維持することも意図しています。重なっている部分をディゾルブしたいだけなら

SELECT ST_Union(geom) FROM tt WHERE campaign_id = 204;

トリックを行います。


こんにちは、ここに結果があります: "POSTGIS =" 1.5.3 "GEOS =" 3.3.2-CAPI-1.7.2 "PROJ =" Rel。4.8.0、2012年3月6日 "LIBXML =" 2.7.3 "USE_STATS"。最近、GEOSで組合に関連する追加を見つけることができませんでした。ポリゴンユニオンで1つの高速化を見つけましたが、ポリゴンをマージしていません。この高速化は議論の余地があるようです。重複するポリゴンの値を追加する必要があるため、ポリゴンを結合したくはありません。
nraynaud
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.