QGIS Python插件开发:移除同图层多边形重叠区域遇问题
QGIS插件开发问题:移除多边形重叠区域失败
我正在开发一款QGIS插件,目标是移除同一图层内多边形之间的重叠区域。实现思路是先对多边形边界进行细分,再删除完全被其他多边形包含的多边形。但使用QgsGeometryEngine.contains()方法时,始终得不到预期的正向匹配结果,最终生成的新图层虽然完成了多边形分割,但重叠区域仍然存在。
代码实现
layer = self.iface.activeLayer() polygons = [ feat.geometry().asWkt() for feat in layer.getFeatures() ] shapely_polygons = [ loads(pol) for pol in polygons ] rings = [ LineString(pol.exterior.coords) for pol in shapely_polygons ] union = unary_union(rings) new_intersections = [ geom.wkt for geom in polygonize(union) ] epsg = layer.crs().postgisSrid() uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes" mem_layer = QgsVectorLayer(uri,'new_polygons','memory') prov = mem_layer.dataProvider() feats = [ QgsFeature() for i in range(len(new_intersections)) ] feats_2 = [] noAdd = [] for i, feat in enumerate(feats): feat.setAttributes([i]) feat.setGeometry(QgsGeometry.fromWkt(new_intersections[i])) for i, feat in enumerate(feats): polygon_geometry_engine = QgsGeometry.createGeometryEngine(feat.geometry().constGet()) for ii, feat_2 in enumerate(feats): if i != ii and polygon_geometry_engine.contains(feat_2.geometry().constGet()): noAdd.append(ii) for i, feat in enumerate(feats): if i not in noAdd: feats_2.append(feat) prov.addFeatures(feats_2) QgsProject.instance().addMapLayer(mem_layer)
示例图说明:分割后的多边形图层中,仍可见未被移除的重叠区域
内容的提问来源于stack exchange,提问作者Giovanni
相关产品推荐
相关产品推荐

