10 votos

Creación de una capa vectorial a partir de características seleccionadas con PyQGIS

En mi plugin de QGIS selecciono dinámicamente características de una capa de Vectores. Y actualmente creo una nueva capa (shapefile) de la selección en la combinación de todas las características en una nueva característica:

theField = QgsField
self.theString = (os.path.expanduser("~")+'\.qgis\\statsRectangle.shp')
feat = QgsFeature()
shapeLayer2 = QgsVectorLayer(self.theString, "Upstream Area Of Interest", 'ogr')
geomtotSubwatershed = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY')
nodLayer.setSelectedFeatures(selectFeatureIDlist)
UpstreamGeometry = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY')

for elem in nodLayer.selectedFeatures():
   UpstreamGeometry = UpstreamGeometry.combine(elem.geometry())

feat.setGeometry(UpstreamGeometry)
QgsMapLayerRegistry.instance().addMapLayer(shapeLayer2)

pero la combinación de la característica seleccionada toma mucho tiempo y congela la interfaz de usuario de QGIS.

15voto

NickGPS Puntos 123

En QGIS 3, hay un nuevo ayudante para eso:

layer = iface.activeLayer()
new_layer = layer.materialize(QgsFeatureRequest().setFilterFids(layer.selectedFeatureIds()))
QgsProject.instance().addMapLayer(new_layer)

Esto le dará una capa de memoria. Entonces usted todavía puede escribir en el disco si es necesario con el QgsVectorFileWriter.

P.D., en mi opinión, deberías intentar evitar el shapefile. La gente podría venir con algunas capas si los nombres de los campos más largos y se truncarán. Especialmente en QGIS3, GeoPackage es el formato por defecto.

12voto

kozloski Puntos 11

Es una pregunta antigua, pero hoy estaba buscando esto - esto es lo que hice:

layer = iface.activeLayer()
QgsVectorFileWriter.writeAsVectorFormat( layer, 'H:/temp/' + layer.name() + ".shp", "utf-8", layer.crs(), "ESRI Shapefile", 1)

La opción booleana "1" al final del comando hace que se guarden sólo las características seleccionadas de la capa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X