Speichern der Shapefile-Ebene als KML mit datasourceOptions mithilfe von PyQGIS

Oct 16 2020

Ich versuche, eine Shapefile-Ebene durch Python-Codierung in das KML-Format in QGIS zu exportieren.

Der Code lautet:

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

Aber ich muss dataSourceOptionin der Zeile hinzufügen , weil ich ein angeben muss "nameField".

Wie kann ich dataSourceOptiondie writeAsVectorFormatMethode hinzufügen ? Ich habe gesehen, dass ich dataSourceOptionein akzeptiere, QStringList()aber ich verstehe es nicht.

Antworten

LeonPowałka Oct 20 2020 at 14:14

datasourceOptions werden als Liste der OGR-Erstellungsoptionen für das Format übergeben.

Es gibt zwei Möglichkeiten: writeAsVectorFormatV2()und writeAsVectorFormat().

Der erste ist meiner Meinung nach ordentlicher:

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

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

Zweite Option:

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

PS. Wie ich die Antwort auf Ihre Frage gefunden habe:

Hier ist die Dokumentation von QgsVectorFileWriter. Der datasourceOptionsParameter wird als Liste der Optionen zur Erstellung von OGR-Datenquellen beschrieben.

Hier habe ich in der GDAL / OGR-Dokumentation nach Optionen für die Erstellung des KML-Formats gesucht. Jedes Format hat seine eigenen Erstellungsoptionen. Wenn Sie andere Optionen angeben müssen, übergeben Sie diese einfach in der Liste, genau wie Sie sie übergeben würden, wenn Sie OGR / GDAL in der Befehlszeile verwenden würden.

AndreaGuardavilla Oct 22 2020 at 13:21

Vielen Dank!

Ich habe eine schlechtere Lösung gefunden:

Bearbeiten des Namens eines Shapefile-Felds in "NAME", das das Standardfeld ist, das vom Schreiber des QgsVectorFileWriter.writeAsVectorFormat verwendet wird.