Каков синтаксис «отображения полей» в пакете Refactor Fields в QGIS?

10

В QGIS есть хороший инструмент «Поля рефакторинга» на панели инструментов обработки:

Инструмент Refactor Fields

Использовать его на одном слое довольно просто.

Однако, когда вы планируете использовать его в пакетном режиме, можно увидеть текстовое поле «Сопоставление полей» . Я ищу пример синтаксиса, который будет использоваться там . Я еще не нашел никакой конкретной документации.

Реактор пакетный

gisnside
источник
После запуска рефакторинга из графического интерфейса вы можете посмотреть команду в меню Обработка -> История (Ctrl + Alt + H)
kadarivan

Ответы:

7

Это не очень удобно, но следующий синтаксис для этого текстового поля является обязательным (я пишу его в несколько строк только для ясности):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Например (не забудьте использовать фигурные скобки):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Вам нужно написать столько строк, сколько указано выше, сколько полей ввода, разделенных запятыми. Например, если ваш слой содержит три поля:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

и это должно работать (это работало для меня).

Обратите внимание, что вы можете не использовать этот словарь-ориентированный синтаксис и напрямую использовать необходимые значения. Например, со ссылкой на первый пример вы можете просто использовать:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Если вы не используете этот синтаксис, будет показана следующая ошибка:

Отсутствует значение параметра: Отображение полей (строка 1)

МГРИ
источник
2
Не могли бы вы объяснить, что означает <код типа>? Я попытался использовать 3, предполагая, что это для строки (так как это 3-й в выпадающих опциях), но я получил ошибку: у объекта 'int' нет атрибута ' getItem ' Смотрите подробности в журнале. Код, который я использовал: {u '"FLAG"', 0, 3, u'FLAG ', 0} для одного из моих слоев, где {' expression ': u' "FLAG" ',' length ': 0,' введите ': 3,' name ': u'FLAG', 'precision': 0}.
JAT86
@ JAT86 Это число, которое идентифицирует тип данных (например, int, string и т. Д.). К сожалению, я не нашел ссылки на них, но я должен помнить значения для наиболее часто используемых типов: 2 для int, 6 для double и 10 для string. В дополнение к этому, возможно, вам не следует указывать 0длину поля (по крайней мере 1!). Пожалуйста, дайте мне знать, если вы решили проблему.
mgri
Спасибо за быстрый ответ. Возможно, пакетная обработка намного сложнее, чем я думал. Я попытался использовать по крайней мере 1 для длины и 10 для типа кода: {u '"FLAG"', 1, 10, u'FLAG ', 0} Тем не менее, появляется ошибка:' int 'объект не имеет атрибута' getItem 'Смотрите журнал для более подробной информации. Мой слой имеет следующие атрибуты: name: flag, Type: string, Length: 0, Precision: 0, Expression: "flag"
JAT86
@ JAT86 Возникает ли проблема с запуском инструмента из графического интерфейса?
mgri
Если под GUI вы подразумеваете один слой, то с ним проблем не возникло. Столбец FLAG был успешно удален после нажатия кнопки «Удалить выбранное поле» и сохранен в новом слое «Refactored».
JAT86,
2

Существует другой алгоритм, похожий на этот, интерфейс которого упрощает пакетный процесс лучше.

введите описание изображения здесь

Mª Carmen Blánquez Hernández
источник
1
Английский английский
BERA
Английский перевод для рассматриваемого пункта меню «Добавить поле в таблицу атрибутов»
Дж. Тейлор,