Нумерация контуров в атрибутивной таблице

Не знаете, где задать вопрос? Задавайте здесь.
crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Нумерация контуров в атрибутивной таблице

Сообщение crashkkm » 23 июн 2022, 04:57

Есть шейп с набором данных такого вида
Снимок.JPG
Снимок.JPG (14.52 КБ) 3316 просмотров
Значений очень много.

Надо чтобы таблица стала такого вида
Снимок2.JPG
Снимок2.JPG (22.97 КБ) 3316 просмотров
Я решил эту задачу в экселе. Сначала сделал сплошную нумерацию в шейпе, скорировал в эксель, колонку контур заполнил формулой =ЕСЛИ(B2=B1;ЕСЛИ(B2=B3;C1+1;1);1)
Снимок3.JPG
Снимок3.JPG (29.63 КБ) 3316 просмотров
так получил нумерацию контуров, потом уже сцепил колонку имя и контур, обратно сцепил эксель с шейпом по колонке "номер" которую сделал в начале.
Сплошную нумерацию колонки номер сделал скриптом

Код: Выделить всё

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 на скрине?

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 23 июн 2022, 12:49

Не сказали, в какой ГИС.
В QGIS:
В таблице, сортируете например по полю где номера. Выделяете (например Фильтром полей, или ручками) все строки с A588.
Открыть калькулятор полей, галочка "Обновить только выделенные",
вставляете выражение
"name" || '_' || var( 'row_number')
Где name - поле с значениями A588. Получите A588_1, A588_2...
Ну и куда сохранить - в новое поле, или обновить

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 23 июн 2022, 12:54

rez_incl.JPG
rez_incl.JPG (42.2 КБ) 3276 просмотров

crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Re: Нумерация контуров в атрибутивной таблице

Сообщение crashkkm » 23 июн 2022, 13:06

AlexRomantsov писал(а):
23 июн 2022, 12:49
Не сказали, в какой ГИС.
работаю в аркгисе, но могу и кугис, если изменить код который я написал то разницы нет. Можно и мапинфо если там есть готовый простой вариант о котором я не знаю.
AlexRomantsov писал(а):
23 июн 2022, 12:49
В таблице, сортируете например по полю где номера
Вы сортируете по полю, где уже проставлены номера контуров. В моем случае их нет. Их надо получить а потом уже сцепить.
AlexRomantsov писал(а):
23 июн 2022, 12:49
Выделяете (например Фильтром полей, или ручками)
Значений (контуров) больше 4 тыс. из них уникальный значений (объектов которые включают контура) больше 800.

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 23 июн 2022, 13:12

Я просто сортирую по этим номерам, они в сцепке не участвуют потом. Можете сортировать как угодно, подставится текущий номер строки, начиная с первой выделенной строчки

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 23 июн 2022, 13:13

crashkkm писал(а):
23 июн 2022, 13:06
Значений (контуров) больше 4 тыс
Тогда усложнять выражение, как - еще не придумал :)

crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Re: Нумерация контуров в атрибутивной таблице

Сообщение crashkkm » 23 июн 2022, 13:26

AlexRomantsov писал(а):
23 июн 2022, 13:12
Я просто сортирую по этим номерам, они в сцепке не участвуют потом. Можете сортировать как угодно, подставится текущий номер строки, начиная с первой выделенной строчки
Это я умею делать, код из первого сообщения делает тоже самое. Получается сколько уникальных значений, столько раз надо будет сделать выделение и применить формулу для нумерации контуров общего значения. Экселем как я написал выше точно проще.
По сути нужен только код этой формулы на питоне или VBA

Код: Выделить всё

=ЕСЛИ(B2=B1;ЕСЛИ(B2=B3;C1+1;1);1)
А в идеале туда же добавить функцию сцепить. Чтобы получилось всего одно действие в одном поле.

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 23 июн 2022, 13:40

Если разово, есть в Анализе - Вектор таблица атрибутов - Добавить поле с автоприращением (в некоторых версиях - Добавить поле (с автоинкрементом)). Там можно группирующее поле назначить

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Нумерация контуров в атрибутивной таблице

Сообщение Ivor » 23 июн 2022, 14:43

AlexRomantsov, вот, а если сделать модель - будет вполне себе многоразовый инструмент

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 24 июн 2022, 05:23

Например вот такую, в архиве комменты в read.txt, простой проект QGIS с моделью и отдельный файл с моделью.
auto_incl_model.zip
(10.77 КБ) 321 скачивание

crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Re: Нумерация контуров в атрибутивной таблице

Сообщение crashkkm » 24 июн 2022, 06:38

AlexRomantsov писал(а):
23 июн 2022, 13:40
Если разово, есть в Анализе - Вектор таблица атрибутов - Добавить поле с автоприращением (в некоторых версиях - Добавить поле (с автоинкрементом)). Там можно группирующее поле назначить
Да, этот инструмент сделал тоже самое что я в экселе, спасибо.
AlexRomantsov писал(а):
24 июн 2022, 05:23
Например вот такую, в архиве комменты в read.txt, простой проект QGIS с моделью и отдельный файл с моделью.
Работает только для точек? Пронумеровать полигоны не получилось.

crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Re: Нумерация контуров в атрибутивной таблице

Сообщение crashkkm » 24 июн 2022, 07:01

Нет, все работает корректно, только с кугиса слой не подгрузился в инструмент, пришлось через каталог. А добавить возможность выбора полей с другими названиями чтобы не пришлось создавать именно 'name' (как группирующее) и поле 'nom' для сортировки возможно?

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 24 июн 2022, 07:21

Слой любой, точки, линии, полигоны, и вовсе без геометрии (только таблица, хоть в экселе).
crashkkm писал(а):
24 июн 2022, 07:01
выбора полей с другими названиями
- это в модели (Анализ - Модели проекта - Редактировать модель). Там активируете например Добавить поле с автоприращением, и в диалоге разбираетесь.
inc2.jpg
inc2.jpg (56.79 КБ) 3141 просмотр
Последний раз редактировалось AlexRomantsov 24 июн 2022, 07:24, всего редактировалось 1 раз.

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Нумерация контуров в атрибутивной таблице

Сообщение AlexRomantsov » 24 июн 2022, 07:23

crashkkm писал(а):
24 июн 2022, 07:01
только с кугиса слой не подгрузился в инструмент
Это потому, что в тестовой модели настроил для Input только точечные слои
inc3.jpg
inc3.jpg (29.26 КБ) 3140 просмотров

crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Re: Нумерация контуров в атрибутивной таблице

Сообщение crashkkm » 22 июл 2022, 06:02

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 - имя группирующего слоя.

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 5 гостей