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

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

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

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

Добавлено: 12 окт 2009, 14:22
nadiopt
через калькулятор поля. вот только по какому принципу нужно нумеровать полигоны - как попало?

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

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

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. Выглядит примерно, так :
Изображение

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

Добавлено: 12 окт 2009, 15:51
Pavel
Спасибо!!! Как раз то, что нужно!
Надо бы занятся будет синтаксисом VBA... :idea:

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

Добавлено: 12 окт 2009, 17:59
nadiopt
гы а можно было проще:) номер= FID+1:)

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

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

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

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

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

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

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

Static rec As Long 

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

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

Добавлено: 05 ноя 2009, 15:18
AndreyL

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

On Error Resume Next

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

__esri_field_calculator_splitter__
reg

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

Добавлено: 06 ноя 2009, 08:11
Pavel
Спасибо за подсказку! Правда, последние две строчки пришлось убрать.
И еще... Где можно почитать про VBA для АркГИС? А то везде натыкаюсь только для Exel... :(

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

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

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

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

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

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