Guardar la capa de shapefile como KML con datasourceOptions usando PyQGIS

Oct 16 2020

Estoy tratando de exportar una capa de shapefile a formato KML en QGIS, a través de la codificación Python.

El codigo es:

QgsVectorFileWriter.writeAsVectorFormat(inputlayer, outputlayer, "utf-8", coord_system, "KML")

Pero tengo que agregar dataSourceOptionen la línea, porque tengo que especificar un "nameField".

¿Cómo puedo agregar dataSourceOptionel writeAsVectorFormatmétodo? He visto que dataSourceOptionacepto un QStringList()pero no lo entiendo.

Respuestas

LeonPowałka Oct 20 2020 at 14:14

datasourceOptions se pasa como una lista de opciones de creación de OGR para el formato.

Hay 2 formas: writeAsVectorFormatV2()y writeAsVectorFormat().

El primero es más ordenado en mi opinión:

options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "KML"
options.fileEncoding = 'utf-8'
options.datasourceOptions = ["NameField=ulica"]

QgsVectorFileWriter.writeAsVectorFormatV2(layer=inputLayer, fileName=fileName, transformContext=QgsCoordinateTransformContext(), options=options)

Segunda opción:

QgsVectorFileWriter.writeAsVectorFormat(layer=inputLayer,
                                            fileName=fileName,
                                            fileEncoding='utf-8',
                                            destCRS=crs,
                                            driverName="KML",
                                            datasourceOptions=["NameField=ulica"]
                                            )

PD. Cómo encontré la respuesta a tu pregunta:

Aquí está la documentación de QgsVectorFileWriter. El datasourceOptionsparámetro se describe como una lista de opciones de creación de fuentes de datos OGR.

Aquí busqué las opciones de creación de formato KML en la documentación de GDAL / OGR. Cada formato tiene sus propias opciones de creación específicas. Si necesita especificar cualquier otra opción, simplemente páselos en la lista tal como los pasaría si usara OGR / GDAL en la línea de comando.

AndreaGuardavilla Oct 22 2020 at 13:21

¡Gracias!

Encontré una solución más pobre:

editar el nombre de uno de los campos de shapefile a "NAME" que es el campo predeterminado que toma el escritor del QgsVectorFileWriter.writeAsVectorFormat.