Нумерация полигонов

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Нумерация полигонов

Сообщение Pavel » 12 окт 2009, 14:03

Что-то я совсем затупил...
Есть полигональная тема, в ней очень много полигонов, им нужно присвоить номера от 1 до n, где n - последний полигон.
Читал вот это - viewtopic.php?f=15&t=3991 не помогло... :(
Быстро, качественно, недорого - выбирайте любые два пункта...

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: Нумерация полигонов

Сообщение nadiopt » 12 окт 2009, 14:22

через калькулятор поля. вот только по какому принципу нужно нумеровать полигоны - как попало?
ин гроссен фамилен нихт клювен клац клац

Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Нумерация полигонов

Сообщение Pavel » 12 окт 2009, 14:40

nadiopt писал(а):через калькулятор поля. вот только по какому принципу нужно нумеровать полигоны - как попало?
А что именно писать в этом калькуляторе? Нумерация идет сплошная по порядку.
Быстро, качественно, недорого - выбирайте любые два пункта...

ГИС программист
Интересующийся
Сообщения: 15
Зарегистрирован: 22 июл 2009, 14:48
Репутация: 0
Откуда: Москва

Re: Нумерация полигонов

Сообщение ГИС программист » 12 окт 2009, 15:20

Pavel писал(а):
nadiopt писал(а):через калькулятор поля. вот только по какому принципу нужно нумеровать полигоны - как попало?
А что именно писать в этом калькуляторе? Нумерация идет сплошная по порядку.
Давайте сделаем по шагам;) Открываете таблицу атрибутов, щелкаете правой кнопкой на колонке, в которую Вы хотите занести порядковый номер и жмете Field Calculator. Ставите галочку Advanced и вводите в текстовое поле "Pre-Logic VBA Script Code" следующий текст:

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

Static rec As Long 
Dim pStart As Long 
Dim pInterval As Long 

' Указываем стартовый номер
' ====================================
pStart = 1 

' С каким интервалом наращиваем номер
' =======================================
pInterval = 1 

 If (rec = 0) Then 
rec = pStart 
Else 
rec = rec + pInterval 
End If 
А в следующее поле вводите просто rec. Выглядит примерно, так :
Изображение

Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Нумерация полигонов

Сообщение Pavel » 12 окт 2009, 15:51

Спасибо!!! Как раз то, что нужно!
Надо бы занятся будет синтаксисом VBA... :idea:
Быстро, качественно, недорого - выбирайте любые два пункта...

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: Нумерация полигонов

Сообщение nadiopt » 12 окт 2009, 17:59

гы а можно было проще:) номер= FID+1:)
ин гроссен фамилен нихт клювен клац клац

ГИС программист
Интересующийся
Сообщения: 15
Зарегистрирован: 22 июл 2009, 14:48
Репутация: 0
Откуда: Москва

Re: Нумерация полигонов

Сообщение ГИС программист » 12 окт 2009, 18:26

nadiopt писал(а):гы а можно было проще:) номер= FID+1:)
При условии, что FID первого объекта==0 и нумерация всех FID-ов непрерывна. А если кто-то удалил полигон, то что у Вас получится, если FID-ы вида [0,1,5,6,8]? Далеко не по порядку:)

Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Нумерация полигонов

Сообщение Pavel » 12 окт 2009, 20:16

гы а можно было проще:) номер= FID+1:)
Скрипт очень простой! Куда уж проще?! Я предполагал, что так он и будет выглядеть, но синтаксиса VBA не знаю... Последнее, на чем я остановился был QBasic, и то это было давно и неправда! :) Плюс все-таки эстетичней смотрится! :wink:
Спасибо за помощь!
Быстро, качественно, недорого - выбирайте любые два пункта...

Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Нумерация полигонов

Сообщение Pavel » 05 ноя 2009, 13:40

Возвращаясь к напечатанному (или к наболевшему, как посмотреть)...
Есть две колонки "Field" и "Area". "Field" заполнено значениями полностью. "Area" - нет (имеются ячейки со значением "0"). Нужно заполнить "Area" из колонки "Field", причем если "Area" имеет значение, то заполнять его не надо. Наужно заполнить лишь нули.
Пытался решить это брутфорсом:

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

Static rec As Long 

If (rec = 0) Then 
rec = [FIELD] 
 
End If
Но не помогло. Заполняет колонку только первым значением ячейки из "Field".
Что нужно дописать в скрипт?
Быстро, качественно, недорого - выбирайте любые два пункта...

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Нумерация полигонов

Сообщение AndreyL » 05 ноя 2009, 15:18

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

On Error Resume Next

If ([Area]=0) Then
 reg = [FIELD]
Else
 reg = [Area]
End If

__esri_field_calculator_splitter__
reg

Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Нумерация полигонов

Сообщение Pavel » 06 ноя 2009, 08:11

Спасибо за подсказку! Правда, последние две строчки пришлось убрать.
И еще... Где можно почитать про VBA для АркГИС? А то везде натыкаюсь только для Exel... :(
Быстро, качественно, недорого - выбирайте любые два пункта...

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: Нумерация полигонов

Сообщение AndreyL » 06 ноя 2009, 18:00

Pavel писал(а):Правда, последние две строчки пришлось убрать.
Последние две строчки - это сказано, что писать в поле.
Pavel писал(а): Где можно почитать про VBA для АркГИС? А то везде натыкаюсь только для Exel... :(
VBA в АркГИС и в Ёкселе одинаковый - микрософтовский. Объекты разные и идеология у АркОбжектс немного своя, ближе к СИшной. Гляньте вот эту тему. Ну и ДатаПлюсовский сайт - там есть специальные ветки.

Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Нумерация полигонов

Сообщение Pavel » 06 ноя 2009, 22:53

AndreyL писал(а):Последние две строчки - это сказано, что писать в поле.
А-а-а... Ну это я догадался... :)
AndreyL писал(а):VBA в АркГИС и в Ёкселе одинаковый - микрософтовский. Объекты разные и идеология у АркОбжектс немного своя, ближе к СИшной. Гляньте вот эту тему. Ну и ДатаПлюсовский сайт - там есть специальные ветки.
Спасибо! Почитаем!
Быстро, качественно, недорого - выбирайте любые два пункта...

self-improving
Активный участник
Сообщения: 144
Зарегистрирован: 18 дек 2009, 15:36
Репутация: 4
Откуда: Златоглавая

Re: Нумерация полигонов

Сообщение self-improving » 07 апр 2010, 15:08

Pavel писал(а):Есть полигональная тема, в ней очень много полигонов, им нужно присвоить номера от 1 до n, где n - последний полигон.
nadiopt писал(а):через калькулятор поля. вот только по какому принципу нужно нумеровать полигоны - как попало?
Навеяло :)
Если при этом таблица отсортирована по какому-либо полю (не FID!), и нумерация должна быть в соответствии с этой сортировкой. Есть идеи?
Варианты перегона в dbf/excel и пр. - не предлагать, хочется чего-нибудь красивого и не столь топорного =)

Ответить

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

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

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