有关如何使用QGIS将多部分要素图层转换为单部分要素的问题和答案分别是:
但是我看到的所有解决方案都将创建一个全新的层,并将所有多部分的几何图形转换为单个几何图形。
因此,问题是,在编辑会话期间,如何能够将多部分要素选择性地转换为单部分要素,而无需创建新图层?
它与“合并所选要素”工具相反,类似于ArcGIS中的爆炸。
有没有插件可以这样做?如何使用python控制台完成此操作?
有关如何使用QGIS将多部分要素图层转换为单部分要素的问题和答案分别是:
但是我看到的所有解决方案都将创建一个全新的层,并将所有多部分的几何图形转换为单个几何图形。
因此,问题是,在编辑会话期间,如何能够将多部分要素选择性地转换为单部分要素,而无需创建新图层?
它与“合并所选要素”工具相反,类似于ArcGIS中的爆炸。
有没有插件可以这样做?如何使用python控制台完成此操作?
Answers:
受此问题和答案的启发,以一个使用开放源代码时如何“轻松”制作自己的解决方案的示例为例,我尝试创建自己的代码来在编辑会话期间有选择地“分解”多部分功能。
我第一次探索了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官方存储库中找到。