Как экспортировать данные с помощью PyQGIS с отображаемыми значениями вместо необработанных значений?Python

Программы на Python
Ответить
Anonymous
 Как экспортировать данные с помощью PyQGIS с отображаемыми значениями вместо необработанных значений?

Сообщение Anonymous »

Я использую QGIS 3.34. Я пытаюсь разработать плагин для пользователей моей компании, позволяющий экспортировать все данные (множество различных векторных слоев) внутри выбранного полигона. Мне нужно экспортировать векторный слой в шейп-файл, используя отображаемые значения вместо необработанных значений. Я знаю, что для этого есть опция в пользовательском интерфейсе экспорта, но мне не удалось заставить ее работать с PyQGIS VectorFileWriterV3. Я попробовал опцию FieldValueConverter, но QGIS каждый раз дает сбой.
Данные взяты с сервера SQL, где проблемные поля являются целыми числами. Отображаемые значения ссылаются в QGIS с помощью ValueRelation на некоторые таблицы внешних ключей.
Вот что я пробовал.
Каждый раз происходит сбой. Я пробовал вывод как f'{output}\\site' и f'{output}\\site.shp'.

Код: Выделить всё

options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "ESRI Shapefile"
options.encoding = 'utf-8'
options.onlySelectedFeatures = True
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
options.fieldValueConverter = QgsVectorFileWriter.FieldValueConverter()
transform_context = QgsProject.instance().transformContext()
error = QgsVectorFileWriter.writeAsVectorFormatV3(inputlayer, f'{output}\\site', transform_context, options)
if error[0] == QgsVectorFileWriter.NoError:
print("success again!")
else:
print(error)
Я также попробовал решение по этой ссылке.

Это решение создает выходной файл без сообщения об ошибке, но значения атрибутов по-прежнему отображаются как целые числа. а не отображаемые значения строки.

Код: Выделить всё

layer = someQGSVectorLayerwithSelectedFeatures
class CustomFieldValueConverter(QgsVectorFileWriter.FieldValueConverter):

def __init__(self, layer):
QgsVectorFileWriter.FieldValueConverter.__init__(self)
self.layer = layer

def fieldDefinition(self, field):
return field

def convert(self, idx, value):
return value

def clone(self):
return FieldValueConverter(self)

layer = iface.activeLayer()

options = QgsVectorFileWriter.SaveVectorOptions()
myconverter = CustomFieldValueConverter(layer)
options.fieldValueConverter = myconverter
options.driverName = "ESRI Shapefile"
options.encoding = 'utf-8'
options.onlySelectedFeatures = True
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
context = QgsProject.instance().transformContext()
error_message = QgsVectorFileWriter.writeAsVectorFormatV3(layer, mypath, context, options)
Я убедился, что могу экспортировать данные с помощью пользовательского интерфейса, и это работает нормально, но мне нужно решение на основе сценария. Мне нужно выбрать и экспортировать 9 слоев, каждый из которых имеет несколько полей со значениями ValueRelations.

Подробнее здесь: https://stackoverflow.com/questions/791 ... raw-values
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»