Страница 1 из 2
					
				Нумерация контуров в атрибутивной таблице
				Добавлено: 23 июн 2022, 04:57
				 crashkkm
				Есть шейп с набором данных такого вида
			
		
				
			 
- Снимок.JPG (14.52 КБ) 5186 просмотров
 
Значений очень много. 
Надо чтобы таблица стала такого вида
			
		
				
			 
- Снимок2.JPG (22.97 КБ) 5186 просмотров
 
Я решил эту задачу в экселе. Сначала сделал сплошную нумерацию в шейпе, скорировал в эксель, колонку контур заполнил формулой =ЕСЛИ(B2=B1;ЕСЛИ(B2=B3;C1+1;1);1) 
			
		
				
			 
- Снимок3.JPG (29.63 КБ) 5186 просмотров
 
так получил нумерацию контуров, потом уже сцепил колонку имя и контур, обратно сцепил эксель с шейпом по колонке "номер" которую сделал в начале. 
Сплошную нумерацию колонки номер сделал скриптом 
Код: Выделить всё
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 КБ) 5146 просмотров
  
			
					
				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 КБ) 5011 просмотров
  
			
					
				Re: Нумерация контуров в атрибутивной таблице
				Добавлено: 24 июн 2022, 07:23
				 AlexRomantsov
				crashkkm писал(а): ↑24 июн 2022, 07:01 только с кугиса слой не подгрузился в инструмент
 
Это потому, что в тестовой модели настроил для Input только точечные слои
			
		
				
			 
- inc3.jpg (29.26 КБ) 5010 просмотров
  
			
					
				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 - имя группирующего слоя.