Який синтаксис синтаксису «відображення поля» інструменту пакетних Refactor Fields у QGIS?


10

У QGIS є цей приємний інструмент "Поля Refactor" у панелі інструментів обробки:

Інструмент Поля Рефактора

Використовувати його на одному шарі досить просто.

Однак, коли ви плануєте використовувати його в пакетному режимі, можна побачити текстове поле "Поля зіставлення" . Я шукаю приклад синтаксису, який буде використаний там . Я ще не знайшов жодної конкретної документації.

Рефактор партії


Після запуску рефакторингу з графічного інтерфейсу ви можете переглянути команду в меню Обробка -> Історія (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} для одного з моїх шарів, де {' izraz ': u' 'FLAG' ',' length ': 0,' type ': 3,' name ': u'FLAG', 'точність': 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 'Дивіться журнал для отримання більш детальної інформації. Мій шар має такі атрибути: ім'я: прапор, Тип: рядок, Довжина: 0, Точність: 0, Вираз: "прапор"
JAT86

@ JAT86 Чи повернення інструменту з графічного інтерфейсу повертає якісь проблеми?
mgri

Якщо під графічним інтерфейсом ви маєте на увазі один шар, ні у нього не виникло жодних проблем. Стовпець FLAG був успішно видалений після "натискання Видалити вибране поле" і був збережений у новий шар "Відновлено".
JAT86

2

Є ще один подібний до цього алгоритм, інтерфейс якого спрощує пакетний процес краще.

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


1
Англійська англійська
BERA

Переклад англійською мовою для питання, про який йде мова, - "Додати поле до таблиці атрибутів"
Дж. Тейлор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.