QGISで編集中に、選択したマルチパートフィーチャをシングルパートフィーチャに変換する方法は?


9

QGISを使用してマルチパートフィーチャレイヤーをシングルパートフィーチャレイヤーに作成する方法については、いくつかの質問とそれぞれの回答があります。

しかし、私が見たすべてのソリューションは、完全に新しいレイヤーを作成し、すべてのマルチパートジオメトリを単一のものに変換します。

では、問題は、編集セッション中に、新しいレイヤーを作成する必要なしに、マルチパートフィーチャをシングルパートフィーチャに選択的に変換する方法でしょうか。

これは、「選択したフィーチャのマージ」ツールとは逆であり、ArcGISでの爆発に似ています。

これを行うプラグインはありますか?Pythonコンソールを使用してこれをどのように行うことができますか?

回答:


18

オープンソースを使用するときにどのように「簡単に」独自のソリューションを作成できるかの例として、この質問と回答に触発されて、編集セッション中にマルチパート機能を選択的に「分解」する独自のコードを作成しようとしました。

私は初めてQGIS 1.8 APIを探索しましたが、仕事をするためにつながっている次のコードを作成しました。

layer = qgis.utils.iface.mapCanvas().currentLayer()
remove_list = []

for feature in layer.selectedFeatures():
    geom = feature.geometry()
    # check if feature geometry is multipart
    if geom.isMultipart():
        remove_list.append(feature.id())
        new_features = []
        temp_feature = QgsFeature(feature)
        # create a new feature using the geometry of each part
        for part in geom.asGeometryCollection ():
            temp_feature.setGeometry(part)
            new_features.append(QgsFeature(temp_feature))
        # add new features to layer
        layer.addFeatures(new_features, False)

# remove the original (multipart) features from layer
if len(remove_list) > 0:
    for id in remove_list:
        layer.deleteFeature (id)    

私は経験豊富なプログラマーではないので、コードが最も効率的なものではないかもしれません。

次の急勾配は、それからプラグインを作成することです...または、少なくとも、試してみてください!

更新:
プラグインを作成することができました。これはMultipart Splitと呼ばれ、QGIS公式リポジトリにあります。


1
QGISなしでこのマルチパート->シングルパート変換を処理することは可能でしょうか?スタンドアロンPythonで実行できる方法はありますか?@Alexandre Neto
Akhil

このソリューションは、マップキャンバスでの編集中にレイヤーのフィーチャの一部を選択することに依存していることに注意してください。レイヤーのすべてのフィーチャ(シェープファイルなど)を単一パーツのフィーチャに変換するには、OGRライブラリを使用できると思います。このリンクをご覧ください
Alexandre Neto

乾杯!助けて.. !!
Akhil

1つのマルチパートポリゴンであるレイヤーを取り、それを1つのパートに変換したいのですが、qgisでこれを行うPythonコードが見つからないようです。ベクターの下にコマンドがあります-ジオメトリツール-マルチパートからシングルパートへ。これは私が欲しいものですpython構文が必要です
kflaw

@AlexandreNeto素晴らしいプラグイン!
DPSSpatial 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.