Автоматическая нумерация
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 23 мар 2016, 09:38
- Репутация: 2
Автоматическая нумерация
Здравствуйте, прошу помощи со следующей проблемой. У меня имеются несколько тысяч объектов и я пронумеровал их всех по порядку с использованием команды $rownum в поле. Но мне нужно добавить к ним ещё объекты и нужно чтобы нумерация продолжалась от последнего номера объекта. То есть если последний был 100 объект, то следующий добавленный 101, и т.д.Есть ли возможность чтобы qgis автоматически сам проставлял нумерацию всех этих объектов? И можно ли сделать чтобы он просто с 0 начал сам нумировал каждый объект?
-
- Активный участник
- Сообщения: 145
- Зарегистрирован: 14 апр 2010, 14:11
- Репутация: 44
- Откуда: Екатеринбург
Re: Автоматическая нумерация
Добрый день!
Сам QGis не умеет контролировать такие вещи, поэтому это нужно делать на уровне формата хранения данных.
Храните данные в БД (Postgres или SQLite), назначайте sequence для нужного поля и новые записи будут получать соответствующие значение.
Сам QGis не умеет контролировать такие вещи, поэтому это нужно делать на уровне формата хранения данных.
Храните данные в БД (Postgres или SQLite), назначайте sequence для нужного поля и новые записи будут получать соответствующие значение.
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 23 мар 2016, 09:38
- Репутация: 2
Re: Автоматическая нумерация
А есть способ, чтобы если добавил несколько объектов, забил в поле команду и он пересчитал их все, но порядок объектов существующий до пересчёта не изменился?Vladimir_R писал(а):Добрый день!
Сам QGis не умеет контролировать такие вещи, поэтому это нужно делать на уровне формата хранения данных.
Храните данные в БД (Postgres или SQLite), назначайте sequence для нужного поля и новые записи будут получать соответствующие значение.
Например у меня есть 100 объектов, я создал поле и добавил туда команду $id и он их пронумеровал в соответствии с идентификатором, но когда добавляешь новые объекты, то старые он оставляет с таким же номером, а новым даёт какие то -300 и т.п. С чем связано неправильная нумерация новых объектов? если это исправить, то будет работать как надо... в теории..
-
- Активный участник
- Сообщения: 145
- Зарегистрирован: 14 апр 2010, 14:11
- Репутация: 44
- Откуда: Екатеринбург
Re: Автоматическая нумерация
Можно написать функцию для калькулятора полей, например такую:
И вызывать ее для вновь созданных объектов:
Особенности: предполагается, что поле ID имеет тип int, в функции указывается название поля как строковая переменная.
Спойлер
Код: Выделить всё
from qgis.core import *
from qgis.gui import *
from qgis.utils import iface
@qgsfunction(args='auto', group='Custom')
def sequence(value, feature, parent):
res = 0
layer = iface.activeLayer()
idx = layer.fieldNameIndex(value)
data = []
for f in layer.getFeatures():
if(type(f.attributes()[idx]) is int):
data.append(f.attributes()[idx])
if(data):
res = max(data)
return res + 1
Код: Выделить всё
sequence('id')
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 23 мар 2016, 09:38
- Репутация: 2
Re: Автоматическая нумерация
Попробовал предложенным вами методом и он выдаёт ошибку:Vladimir_R писал(а):Можно написать функцию для калькулятора полей, например такую:И вызывать ее для вновь созданных объектов:Спойлер
Код: Выделить всё
from qgis.core import * from qgis.gui import * from qgis.utils import iface @qgsfunction(args='auto', group='Custom') def sequence(value, feature, parent): res = 0 layer = iface.activeLayer() idx = layer.fieldNameIndex(value) data = [] for f in layer.getFeatures(): if(type(f.attributes()[idx]) is int): data.append(f.attributes()[idx]) if(data): res = max(data) return res + 1
Особенности: предполагается, что поле ID имеет тип int, в функции указывается название поля как строковая переменная.Код: Выделить всё
sequence('id')
Ошибка разбора:
syntax error, unexpected COLUMN_REF, expecting $end
Ошибка выполнения:
Ошибка обработки. Не найден корневой элемент.
Похоже я делаю что-то не так. Можете объяснить по подробней?
Поле Id у меня имеет тип int, а второе поле я назвал "nomer".
До этого использовал функцию CASE WHEN "nomer" > 0 THEN nomer ELSE $rownum END
но он тогда нумеровал в продолжении порядка, который у поля id, т.е. в середине поля появились новые объекты и он назвал их 12,13,14, а есть объекты с номером 1,2,3 и т.д. и 20, 21,22 и т.д. Но это не то. Не могу найти как бы заставить его брать последний номер из id.
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 30 сен 2017, 19:47
- Репутация: 0
- Откуда: Киев
Re: Автоматическая нумерация
Jensenaems, можно уточнение? Как Вам удалось выполнить автоматическую нумерацию в QGIS с помощью калькулятора полей и функций $rownum и $id. Можно тут поподробнее.
- Crackfox
- Активный участник
- Сообщения: 131
- Зарегистрирован: 02 мар 2016, 20:29
- Репутация: 17
- Ваше звание: разрядник
- Откуда: Москва
- Контактная информация:
Re: Автоматическая нумерация
$rownum автоматически нумерует с единицы.Евгений Киевский писал(а): ↑09 окт 2017, 19:34Как Вам удалось выполнить автоматическую нумерацию в QGIS с помощью калькулятора полей и функций $rownum и $id. Можно тут поподробнее.
Хотим нумеровать с 400-ого id:
Код: Выделить всё
$rownum+399
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 18 окт 2018, 16:15
- Репутация: 0
- Откуда: Иваново
Re: Автоматическая нумерация
Здравствуйте, дабы не плодить темы напишу сюда, тк вопрос в чем-то схожий.
Также имеется большое количество полигонов, которые нужно пронумеровать по порядку относительно сортировки по площади.
Пробовал проставить нумерацию с помощью @row_number, но номера ставятся рандомно.
Также имеется большое количество полигонов, которые нужно пронумеровать по порядку относительно сортировки по площади.
Пробовал проставить нумерацию с помощью @row_number, но номера ставятся рандомно.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей