Генерация атрибутов в автоматическом режиме с QGIS?


11

Я хочу автоматически создавать идентификаторы при создании новых функций. Поэтому каждый раз, когда я создаю новую точку, ее идентификатор будет увеличиваться на 1, как показано ниже:

Feature 1: id 1
Feature 2: id 2
Feature 3: id 3

Как я могу атаковать это?

Ответы:


8

Если вы щелкнете правой кнопкой мыши по своему слою и перейдете к Properties > Fieldsзатем щелкните по Text Edit, вы можете установить значения по умолчанию (введя значение или используя выражение), которые будут автоматически отображаться в таблице атрибутов.

К сожалению, использование выражения вроде $rownum(которое должно дать вам уникальные идентификаторы для ваших функций) не работает (я полагаю, потому что функция должна быть зафиксирована первой?). Но мы можем создать функцию, которая подсчитывает количество выполненных функций и добавляет 1. Вы можете получить доступ к редактору функций, как показано на рисунке:

Редактор функций

Затем в редакторе функций создайте новый файл или отредактируйте существующий и используйте следующий код:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def update(feature, parent):
    layer = qgis.utils.iface.activeLayer()
    x = layer.featureCount()
    return x + 1

Нажмите « Загрузить», затем перейдите на вкладку « Выражение » рядом с ней и вставьте выражение:

update()

Затем нажмите OK, и вы должны увидеть значение предварительного просмотра:

предварительный просмотр

Нажмите « ОК» , « Применить» и т. Д., И теперь, надеюсь, когда вы создадите функцию, она автоматически создаст уникальный идентификатор в выбранном вами поле.



3

Я думаю, что вы не можете установить значения по умолчанию при создании новой функции, но вы можете попробовать следующую работу:

  • когда вы закончите создание ваших функций, перейдите в таблицу атрибутов
  • Перейдите в калькулятор полей и создайте новый столбец с именем idтипа Int.
  • В качестве значения вставьте, @row_numberчто даст уникальные вейлы в соответствии с номером строки
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.