Страница 1 из 2
Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 04:57
crashkkm
Есть шейп с набором данных такого вида

- Снимок.JPG (14.52 КБ) 4785 просмотров
Значений очень много.
Надо чтобы таблица стала такого вида

- Снимок2.JPG (22.97 КБ) 4785 просмотров
Я решил эту задачу в экселе. Сначала сделал сплошную нумерацию в шейпе, скорировал в эксель, колонку контур заполнил формулой =ЕСЛИ(B2=B1;ЕСЛИ(B2=B3;C1+1;1);1)

- Снимок3.JPG (29.63 КБ) 4785 просмотров
так получил нумерацию контуров, потом уже сцепил колонку имя и контур, обратно сцепил эксель с шейпом по колонке "номер" которую сделал в начале.
Сплошную нумерацию колонки номер сделал скриптом
Код: Выделить всё
rec=0
def autoIncrement():
global rec
pStart = 1 #adjust start value, if req'd
pInterval = 1 #adjust interval value, if req'd
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
__esri_field_calculator_splitter__
autoIncrement()
Можно ли избежать этих танцев и дополнить этот скрипт чтобы сразу получить значения контуров в таблице шейпа как колонка D на скрине?
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 12:49
AlexRomantsov
Не сказали, в какой ГИС.
В QGIS:
В таблице, сортируете например по полю где номера. Выделяете (например Фильтром полей, или ручками) все строки с A588.
Открыть калькулятор полей, галочка "Обновить только выделенные",
вставляете выражение
"name" || '_' || var( 'row_number')
Где name - поле с значениями A588. Получите A588_1, A588_2...
Ну и куда сохранить - в новое поле, или обновить
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 12:54
AlexRomantsov

- rez_incl.JPG (42.2 КБ) 4745 просмотров
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 13:06
crashkkm
работаю в аркгисе, но могу и кугис, если изменить код который я написал то разницы нет. Можно и мапинфо если там есть готовый простой вариант о котором я не знаю.
AlexRomantsov писал(а): ↑23 июн 2022, 12:49
В таблице, сортируете например по полю где номера
Вы сортируете по полю, где уже проставлены номера контуров. В моем случае их нет. Их надо получить а потом уже сцепить.
AlexRomantsov писал(а): ↑23 июн 2022, 12:49
Выделяете (например Фильтром полей, или ручками)
Значений (контуров) больше 4 тыс. из них уникальный значений (объектов которые включают контура) больше 800.
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 13:12
AlexRomantsov
Я просто сортирую по этим номерам, они в сцепке не участвуют потом. Можете сортировать как угодно, подставится текущий номер строки, начиная с первой выделенной строчки
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 13:13
AlexRomantsov
crashkkm писал(а): ↑23 июн 2022, 13:06
Значений (контуров) больше 4 тыс
Тогда усложнять выражение, как - еще не придумал

Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 13:26
crashkkm
AlexRomantsov писал(а): ↑23 июн 2022, 13:12
Я просто сортирую по этим номерам, они в сцепке не участвуют потом. Можете сортировать как угодно, подставится текущий номер строки, начиная с первой выделенной строчки
Это я умею делать, код из первого сообщения делает тоже самое. Получается сколько уникальных значений, столько раз надо будет сделать выделение и применить формулу для нумерации контуров общего значения. Экселем как я написал выше точно проще.
По сути нужен только код этой формулы на питоне или VBA
А в идеале туда же добавить функцию сцепить. Чтобы получилось всего одно действие в одном поле.
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 13:40
AlexRomantsov
Если разово, есть в Анализе - Вектор таблица атрибутов - Добавить поле с автоприращением (в некоторых версиях - Добавить поле (с автоинкрементом)). Там можно группирующее поле назначить
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 23 июн 2022, 14:43
Ivor
AlexRomantsov, вот, а если сделать модель - будет вполне себе многоразовый инструмент
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 24 июн 2022, 05:23
AlexRomantsov
Например вот такую, в архиве комменты в read.txt, простой проект QGIS с моделью и отдельный файл с моделью.
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 24 июн 2022, 06:38
crashkkm
AlexRomantsov писал(а): ↑23 июн 2022, 13:40
Если разово, есть в Анализе - Вектор таблица атрибутов - Добавить поле с автоприращением (в некоторых версиях - Добавить поле (с автоинкрементом)). Там можно группирующее поле назначить
Да, этот инструмент сделал тоже самое что я в экселе, спасибо.
AlexRomantsov писал(а): ↑24 июн 2022, 05:23
Например вот такую, в архиве комменты в read.txt, простой проект QGIS с моделью и отдельный файл с моделью.
Работает только для точек? Пронумеровать полигоны не получилось.
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 24 июн 2022, 07:01
crashkkm
Нет, все работает корректно, только с кугиса слой не подгрузился в инструмент, пришлось через каталог. А добавить возможность выбора полей с другими названиями чтобы не пришлось создавать именно 'name' (как группирующее) и поле 'nom' для сортировки возможно?
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 24 июн 2022, 07:21
AlexRomantsov
Слой любой, точки, линии, полигоны, и вовсе без геометрии (только таблица, хоть в экселе).
crashkkm писал(а): ↑24 июн 2022, 07:01
выбора полей с другими названиями
- это в модели (Анализ - Модели проекта - Редактировать модель). Там активируете например Добавить поле с автоприращением, и в диалоге разбираетесь.

- inc2.jpg (56.79 КБ) 4610 просмотров
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 24 июн 2022, 07:23
AlexRomantsov
crashkkm писал(а): ↑24 июн 2022, 07:01
только с кугиса слой не подгрузился в инструмент
Это потому, что в тестовой модели настроил для Input только точечные слои

- inc3.jpg (29.26 КБ) 4609 просмотров
Re: Нумерация контуров в атрибутивной таблице
Добавлено: 22 июл 2022, 06:02
crashkkm
https://russianblogs.com/article/37251517562/
Код: Выделить всё
rec=0
fname = ""
def autoIncrement(field):
global rec
global fname
if field != fname:
fname = field
pStart = 1 #adjust start value, if req'd
rec = pStart
return rec
else:
pInterval = 1 #adjust interval value, if req'd
rec = rec + pInterval
return rec
__esri_field_calculator_splitter__
autoIncrement( !NAME! )
Где NAME - имя группирующего слоя.