Страница 1 из 1

Экпорт в GML версии 3.0 средствами PyQgis

Добавлено: 07 окт 2025, 14:46
Stasss
Здравствуйте!
Может кто подскажет, как скриптом PyQgis (какой именно код должен быть, параметры) экспортировать слои в формат GML именно версии 3.0 (не 3.2)?
Способы типа
- "QgsVectorFileWriter.writeAsVectorFormat(lyr, fn + '.gml', "utf-8", crs, 'GML')"
или
- "params = { "INPUT": layer,
"OUTPUT": output_filename,
"CRS": crscode,
"VERSION": "3.0",
"LAYER_OPTIONS": ["SRSNAME=urn:ogc:def:crs:EPSG::3857"]}
processing.run("gdal:convertformat", params)"
результатом дают именно версию 3.2
Однако, если выполнять экспорт стандартным "Save vector layer as..." имеется опция выбора версии GML и выбор "GML3" экспортирует именно в версию 3.0. Может как-то можно "подсмотреть" строку с параметрами при таком экспорте?

Re: Экпорт в GML версии 3.0 средствами PyQgis

Добавлено: 07 окт 2025, 22:22
Tarak
Stasss писал(а):
07 окт 2025, 14:46
Здравствуйте!
Может кто подскажет, как скриптом PyQgis (какой именно код должен быть, параметры) экспортировать слои в формат GML именно версии 3.0 (не 3.2)?
Способы типа
- "QgsVectorFileWriter.writeAsVectorFormat(lyr, fn + '.gml', "utf-8", crs, 'GML')"
или
- "params = { "INPUT": layer,
"OUTPUT": output_filename,
"CRS": crscode,
"VERSION": "3.0",
"LAYER_OPTIONS": ["SRSNAME=urn:ogc:def:crs:EPSG::3857"]}
processing.run("gdal:convertformat", params)"
результатом дают именно версию 3.2
Однако, если выполнять экспорт стандартным "Save vector layer as..." имеется опция выбора версии GML и выбор "GML3" экспортирует именно в версию 3.0. Может как-то можно "подсмотреть" строку с параметрами при таком экспорте?
Попробуй через QgsVectorFileWriter.SaveVectorLayer() с указанием driverName='GML' и параметром datasourceOptions=['GML3=YES'].
Это примерно то, что делает GUI при выборе “GML3” — тогда экспортируется именно в 3.0, а не 3.2

Re: Экпорт в GML версии 3.0 средствами PyQgis

Добавлено: 08 окт 2025, 08:36
Stasss
Tarak писал(а):
07 окт 2025, 22:22
Попробуй через QgsVectorFileWriter.SaveVectorLayer() с указанием driverName='GML' и параметром datasourceOptions=['GML3=YES'].
Это примерно то, что делает GUI при выборе “GML3” — тогда экспортируется именно в 3.0, а не 3.2
Спасибо за наводку!
Однако SaveVectorLayer() QGIS API не предусмотрен.
Но добился нужного следующими вариантами:
1. "QgsVectorFileWriter.writeAsVectorFormat(layer, output_filename, "utf-8", QgsCoordinateReferenceSystem('EPSG:3857'), 'GML', datasourceOptions = ['FORMAT=GML3'])"
2. "transformContext = QgsProject.instance().transformContext() # required for V3
options = QgsVectorFileWriter.SaveVectorOptions()
options.ct = QgsCoordinateTransform(layer.crs(), QgsCoordinateReferenceSystem('EPSG:3857'), transformContext)
options.driverName = 'GML'
options.datasourceOptions = ['FORMAT=GML3']
options.encoding = 'utf-8'
QgsVectorFileWriter.writeAsVectorFormatV3(
layer=layer,
fileName=output_filename,
transformContext=transformContext,
options=options
)"