7 votos

¿Guardar una capa como shapefile con PyQGIS?

Usando QGIS 3.4.4, estoy intentando guardar una capa como shapefile con el siguiente código:

import qgis.core 
import os

working_folder = r'C:\myFolder'
fc_Prospect = os.path.join(working_folder, Equipment.gdb|layername=Prospect) 
layer1 = QgsVectorLayer(fc_Prospect, 'Prospect', 'ogr')

path = r'C:\myFolder\test.shp'
_writer = QgsVectorFileWriter.writeAsVectorFormat(layer1,path,'utf-8','ESRI Shapefile')

Sin embargo, estoy recibiendo este error:

TypeError: QgsVectorFileWriter.writeAsVectorFormat(): los argumentos no coinciden con ninguna llamada sobrecargada no coinciden con ninguna llamada sobrecargada:
sobrecarga 1: el argumento 4 tiene un tipo inesperado tipo 'str'
sobrecarga 2: el argumento 4 tiene un tipo inesperado 'str'
sobrecarga 3: el argumento 3 tiene un tipo inesperado 'str'

Soy bastante nuevo con python, así que no estoy seguro de lo que significa este error. He revisado la documentación en https://qgis.org/pyqgis/master/core/QgsVectorFileWriter.html#qgis.core.QgsVectorFileWriter.writeAsVectorFormat pero no ha servido de nada.

7voto

Adam Ernst Puntos 6939

Mirando el documentación sugiere que está esperando estos parámetros:

Parámetros:

capa - capa para escribir

fileName - nombre del archivo a escribir

fileEncoding - codificación a utilizar

destCRS - CRS para reproyectar las geometrías exportadas, o CRS inválido para no reproyectar

driverName - Controlador OGR a utilizar

onlySelected - escribir sólo las características seleccionadas de la capa

errorMessage - puntero al búfer para el mensaje de error

datasourceOptions - lista de opciones de creación de fuentes de datos OGR

layerOptions - lista de opciones de creación de capas OGR

skipAttributeCreation - sólo escribe geometrías

newFilename - Puntero QString que contendrá el nuevo nombre del archivo creado (en caso de que es diferente a fileName).

symbologyExport - simbología a exportar

symbologyScale - escala de la simbología

filterExtent - si no es un puntero nulo, sólo se guardarán las características que intersecten la extensión (añadido en QGIS 2.4)

overrideGeometryType - establecer un tipo de geometría válido para anular el tipo de geometría por defecto de la capa. Este parámetro

Así que tu error dice que espera que el 4º parámetro sea un CRS y no una cadena.

Sospecho que eso significa que debes escribir tu llamada como:

_writer = QgsVectorFileWriter.writeAsVectorFormat(layer1,path,'utf-8',driverName='ESRI Shapefile')

0 votos

He probado lo que sugieres y funciona, aunque arroja un error: Traceback (most recent call last): Archivo " C:\PROGRA ~1 \QGIS3 ~1.4 \apps\Python37\lib\code.py ", línea 90, en runcode exec(code, self.locals) File "<input>", línea 1, en <module> File "<string>", línea 17, en <module> RuntimeError: wrapped C/C++ object of type QgsVectorLayer has been deleted. ¿Alguna idea de lo que significa?

1 votos

Más allá de mí, me temo

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