Страница 1 из 2

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

Добавлено: 23 июн 2022, 04:57
crashkkm
Есть шейп с набором данных такого вида
Снимок.JPG
Снимок.JPG (14.52 КБ) 4785 просмотров
Значений очень много.

Надо чтобы таблица стала такого вида
Снимок2.JPG
Снимок2.JPG (22.97 КБ) 4785 просмотров
Я решил эту задачу в экселе. Сначала сделал сплошную нумерацию в шейпе, скорировал в эксель, колонку контур заполнил формулой =ЕСЛИ(B2=B1;ЕСЛИ(B2=B3;C1+1;1);1)
Снимок3.JPG
Снимок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
rez_incl.JPG (42.2 КБ) 4745 просмотров

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

Добавлено: 23 июн 2022, 13:06
crashkkm
AlexRomantsov писал(а):
23 июн 2022, 12:49
Не сказали, в какой ГИС.
работаю в аркгисе, но могу и кугис, если изменить код который я написал то разницы нет. Можно и мапинфо если там есть готовый простой вариант о котором я не знаю.
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

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

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

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

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

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

Добавлено: 23 июн 2022, 14:43
Ivor
AlexRomantsov, вот, а если сделать модель - будет вполне себе многоразовый инструмент

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

Добавлено: 24 июн 2022, 05:23
AlexRomantsov
Например вот такую, в архиве комменты в read.txt, простой проект QGIS с моделью и отдельный файл с моделью.
auto_incl_model.zip
(10.77 КБ) 367 скачиваний

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
inc2.jpg (56.79 КБ) 4610 просмотров

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

Добавлено: 24 июн 2022, 07:23
AlexRomantsov
crashkkm писал(а):
24 июн 2022, 07:01
только с кугиса слой не подгрузился в инструмент
Это потому, что в тестовой модели настроил для Input только точечные слои
inc3.jpg
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 - имя группирующего слоя.