6 votos

Cómo combinar la forma de archivos con atributos de una secuencia de comandos de python en QGIS?

Tengo algunos archivos shape. Todos ellos son el mismo tipo de forma y todos tienen los mismos atributos.

Si quería combinar manualmente el "Vector/gestión de Datos/herramientas de combinación de archivos shape a uno" funciona bien.

Sin embargo, según la pregunta del título, me gustaría hacerlo con python desde un script.

Me fui a la caza de la "combinar archivos shape" en la esperanza de que yo pudiera improvisar en mi guión, pero no lo pude encontrar.

He tratado de escribir uno yo mismo la iteración sobre las características y copiarlos en otra capa como por la pyQGIS libro de cocina, pero perdió los atributos a lo largo del camino.

feature_list = inputlayer.getFeatures()
  for feature in feature_list:
    (res, outFeats) = outputlayer.dataProvider().addFeatures( [ feature ] )

También he tratado de escribir una secuencia de comandos mediante el iface copiar las características de la función con la misma pérdida de atributos.

qgis.utils.iface.setActiveLayer(importlayer)
importlayer.setSelectedFeatures(range(100))
#(there are exactly 100 features)
qgis.utils.iface.actionCopyFeatures().trigger()
iface.setActiveLayer( outputlayer )
outputlayer.startEditing()
qgis.utils.iface.actionPasteFeatures().trigger()

Alguien me puede ayudar a arreglar mi código para conservar la copia de atributos o me apunte a un pyQGIS script para lograr este resultado?

9voto

deaan Puntos 11

OK aquí está la respuesta. He descubierto el procesamiento de la caja de herramientas de la que no era una simple solución: Como por http://qgis.org/de/docs/user_manual/processing/console.html

Desde la consola se puede encontrar una lista de todos los algoritmos disponibles que contienen la palabra "fusión", escribiendo:

import processing
processing.alglist("merge")

Luego de averiguar cómo utilizar la función más conveniente con:

processing.alghelp("qgis:mergevectorlayers")

Luego, simplemente utiliza el algoritmo en su secuencia de comandos de la siguiente manera:

processing.runalg("qgis:mergevectorlayers", layer1, layer2,"outputfilename.shp")

Por otro lado manualmente la fusión de formas aún puede ser útil. Para aquellos que todavía quieren copiar manualmente las características de una capa de entrada en algunos capa de destino con los atributos que usted necesita, en primer lugar asegúrese de que la capa de destino tiene esos campos.

old_attribute_List = input_layer.dataProvider().fields().toList()
new_attribute_List=[]
for attrib in old_attribute_List:
  if destination_layer.fieldNameIndex(attrib.name())==-1:
    new_attribute_List.append(QgsField(attrib.name(),attrib.type()))
destination_layer_data_provider.addAttributes(new_attribute_List)
destination_layer.updateFields()

A continuación copiar manualmente a través de las características que usted puede hacer:

destination_layer.startEditing()
cfeature = QgsFeature()
cfeatures=[]
xfeatures = input_layer.getFeatures()
for xfeature in xfeatures:
    xgeometry = xfeature.geometry()
    #GEOMETRY TRANSFORM GOES HERE IF DESTINATION CRS DIFFERS FROM INPUT CRS
    cfeature_Attributes=[]
    cfeature_Attributes.extend(xfeature.attributes())
    cfeature.setGeometry(xgeometry)
    cfeature.setAttributes(cfeature_Attributes)
    cfeatures.append(cfeature)
destination_layer_data_provider.addFeatures(cfeatures)
destination_layer_data_provider.commitChanges()

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