Нумерация узлов (вершин) полигона вдоль контура

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
crashkkm
Активный участник
Сообщения: 139
Зарегистрирован: 17 окт 2016, 16:37
Репутация: 14

Нумерация узлов (вершин) полигона вдоль контура

Сообщение crashkkm » 05 фев 2018, 17:36

На форуме есть ни одна тема по поводу нумерации как узлов, так и объектов, но на свой вопрос ответа не нашел.
Имеется полигон, необходимо задать нумерацию вершин этого полигона строго вдоль контура с указанной мной вершины. Утилиты типа UPT, RPoint в мапинфо задают нумерацию только с северо-западного узла, поэтому мне почти никогда не пригождаются.
В аркгисе я извлекаю вершины в точечный слой и нумерую их. Если полигон расположен по диагонали, горизонтально или вертикально, можно добавить в таблицу точечного слоя координаты XY и инструментом "сортировка" расположить записи по возрастанию или убыванию, потом в отдельной колонке добавить порядковый номер скриптом

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

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
Но если полигон сложной формы?
В идеале все манипуляции проделать в аркгисе, если не в аркгисе, то в мапинфо, если не в мапинфо, то в кугисе.
В общем рассмотрю все варианты)

gamm
Гуру
Сообщения: 4044
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1049
Ваше звание: программист
Откуда: Казань

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение gamm » 05 фев 2018, 17:52

не очень, понятно, чего вы хотите - что такое
crashkkm писал(а):
05 фев 2018, 17:36
задать нумерацию вершин этого полигона строго вдоль контура с указанной мной вершины
вы хотите точки получить с номерами, или реально координаты в геометрии полинона переставить? что за контур, вдоль которого?
crashkkm писал(а):
05 фев 2018, 17:36
Но если полигон сложной формы?
и чем это вам мешает (но сначала нужен ответ на первый вопрос)? Лучше картинку нарисовать ...

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

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение crashkkm » 05 фев 2018, 18:22

gamm писал(а):
05 фев 2018, 17:52
не очень, понятно, чего вы хотите - что такое
crashkkm писал(а): ↑30 минут назад
задать нумерацию вершин этого полигона строго вдоль контура с указанной мной вершины
что такое контур полигона? это линия между его вершинами

Есть такой полигон. Надо отобразить его вершины и задать порядковый номер вдоль его контура
Изображение
Например так
Изображение
или так
Изображение
Нумерация с северо-западного угла здесь не поможет. Понятно что я выбрал пример где 1,5 вершины на весь полигон, проблем перенумеровать вручную нет, а может быть 1500.

gamm
Гуру
Сообщения: 4044
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1049
Ваше звание: программист
Откуда: Казань

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение gamm » 05 фев 2018, 19:03

что мешает устроить цикл по вершинам, найти свою, и нумеровать от нее?

можно пронумеровать вершины от того же северо-западного угла, потом найти среди них первую вершину и свою стартовую, и просто перенумеровать. Фактически, вам нужно просто прибавить сдвиг. Если 1 - номер первой вершины, n2 - номер нужной стартовой вершины, и N - число вершин, то нужно заменить i (номер вершины) на ((i-1+N-(n2-1)) %% N)+1, если я правильно помню взятие остатка (%%) в Питоне.

если программировать не трудно, то лучше сохранить shape, загрузить в R/Python, и там спокойно сделать все, чего душа пожелает ...

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

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение crashkkm » 05 фев 2018, 20:18

gamm писал(а):
05 фев 2018, 19:03
если программировать не трудно
трудно)
Идею я понял, но как воплотить ее и проверить работает ли она для меня не знаю т.к. питоном не владею

5Nap
Участник
Сообщения: 85
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение 5Nap » 06 фев 2018, 11:16

crashkkm писал(а):
05 фев 2018, 20:18
т.к. питоном не владею
тогда вы не сможете это сделать, только руками.
Можно изголяться и руками поставить начальную точку для каждого полигона, потом приджойнить вертексы к этой точке (для каждого полигона в отдельности), записать, какой номер у вертекса, совпадающего с заданной точкой, и для каждого полигона их перенумеровать с этим сдвигом.

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

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение crashkkm » 06 фев 2018, 21:53

5Nap, если честно не уловил суть сообщения.
Для каждого полигона? Сквозная нумерация нескольких полигонов отдельная тема, мы пока рассматриваем ситуацию когда полигон один с набором этих вертексов
Нет скрипта, который я бы мог применить в питонном калькуляторе или VBA без особых знаний программирования, чтобы перенумеровать вершины по схеме которую предложил gamm? В стандартном хелпе вроде нет.

5Nap
Участник
Сообщения: 85
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение 5Nap » 07 фев 2018, 09:11

crashkkm,
  • берёте ваш полигон и новый пустой точечный слой
  • В точечном слое создаёте одну точку (базовую) в той вершине, с которой хотите начать нумерацию
  • Перегоняете полигон в вертексы - получаете точечный слой
  • Spatial Join слоя с одной точкой к слою с вершинами - получаете OID вертекса, который должен получить номер "1"
  • Join слоя с базовой точкой после Spatial Join по OID вертекса к слою с вертексами - в итоге в слое вертексов у вас будет маркер у начальной точки
  • В калькуляторе по формуле gamm пересчитываете номера вертексов

Алекс
Активный участник
Сообщения: 183
Зарегистрирован: 26 июл 2010, 08:54
Репутация: 29
Откуда: Ногинск

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение Алекс » 07 фев 2018, 09:23

В каком виде (формате) Ваши полигоны? Если что-то общеизвестное (shp, mif/mid, dxf, sxf) или в виде простого списка координат - можно загрузить в Панораму. Там есть режим "Назначить указанную точку полигона первой". А потом вернуть обратно в Ваш формат.
Если карту создать масштаба 1:2 000 при небольшом количестве объектов - можно "поиграться" без лицензии.

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

Re: Нумерация узлов (вершин) полигона вдоль контура

Сообщение crashkkm » 07 фев 2018, 15:58

Алекс, в виде shp, но ведь всегда из него можно выгрузить список координат а потом в панораму, с которой я не работал. Щас буду смотреть

Ответить

Вернуться в «ArcGIS»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей