2017-10-31 33 views
0

GDAL/OGR APIまたはコマンドラインツールを使用して重なり合うポリゴンを分解する(マージする)方法はありますか? ?私はたくさんの検索をしており、必要なものに似たものは見つけられません。しかし、この問題はまだ解決されていない可能性は非常に低いと思います。連結されていない結果を区別して重なり合うポリゴン(GDAL/OGR付き)を分解する

は、ここで私は必要なものの詳細な説明です:

  • 私の入力は、単一の層を持つ単一の形状ファイル(ESRIシェイプファイル)で構成されています。
  • このレイヤーには、属性で区別できないポリゴンが含まれています。 (すべて同じ属性を持ちます)。
  • これらの多くは重複しており、重複している人の結合を取得したいと考えています。
  • 接続されていない領域は、別々のポリゴンになります。

トラブルの原因となる最後のポイントです。私は基本的に私が最後の点を除いて必要なものを手に入れます。シェイプファイルを解消するための典型的なソリューションを実行すると、領域が接続されていなくてもすべてを含む単一のポリゴンで終了します。

更新: GDALを完全に削除することで問題を解決しました。多くの情報源が指摘しているように、一般的にフィオナと整形式を使ってシェイプファイルを扱う方が良い方法です。私は下に自分のソリューションを掲載しました。

答えて

0

私はgdal/ogrを捨て、整形外科とフィオナで続けました。これはまさに私が必要とするものです。私のデータセットには自己交差するポリゴンが含まれており、cascaded_unionを呼び出す前にフィルタリングする必要があるため、フィルタリングが必要でした。

import fiona                          
from shapely.ops import cascaded_union                    
from shapely.geometry import shape, mapping 

with fiona.open(src, 'r') as ds_in:                                                     
    crs = ds_in.crs 
    drv = ds_in.driver 

    filtered = filter(lambda x: shape(x["geometry"]).is_valid, list(ds_in))                     

    geoms = [shape(x["geometry"]) for x in filtered]             
    dissolved = cascaded_union(geoms)          

schema = {                          
    "geometry": "Polygon",                      
    "properties": {"id": "int"}                     
} 

with fiona.open(dst, 'w', driver=drv, schema=schema, crs=crs) as ds_dst:          
    for i,g in enumerate(dissolved):                   
     ds_dst.write({"geometry": mapping(g), "properties": {"id": i}}) 
関連する問題