Работа с атрибутивными таблицами

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
destribution
Участник
Сообщения: 68
Зарегистрирован: 30 авг 2014, 11:11
Репутация: 0

Работа с атрибутивными таблицами

Сообщение destribution » 30 авг 2014, 11:32

Здравствуйте, уважаемые пользователи!
Быть может создал тему, зря, но не судите строго (обратите внимание на стаж)
В общем проблема заключается в чем...
Имеется таблица с атрибутами, в которой две колонки. Первая содержит несколько повторяющихся значений (к примеру десять значений под номером 1 и десять значений под номером 2). Как автоматически присвоить порядковый номер для этих значений, но только во вторую колонку ?
На практике хочу чтоб получилось так...
1-1
1-2
1-3
1-4
...
2-1
2-2
2-3
2-4
...
Буду очень признателен за помощь.

swdartvader
Активный участник
Сообщения: 190
Зарегистрирован: 16 дек 2012, 09:08
Репутация: 48
Откуда: Калининград

Re: Работа с атрибутивными таблицами

Сообщение swdartvader » 30 авг 2014, 17:33

Здравствуйте. Посредством выражения на python, с помощью инструмента "калькулятор поля" ("field calculator...") Вы можете произвести необходимые расчеты

1. Создайте текстовое поле
2. Войдите в калькулятор поля для него
3. Выберите парсер Python
4. Используйте "%s-%s" % (!FID!, !Field!)
где FID - обычно поле с порядковым номером с нуля
Field - второе необходимое поле
"%s-%s" - здесь вы можете заменить "-" на любой другой знак

Если необходимо поле с порядковыми от "1", то вы, в первую очередь, можете создать новое поле, где посредством [FID] + 1 можете их рассчитать

destribution
Участник
Сообщения: 68
Зарегистрирован: 30 авг 2014, 11:11
Репутация: 0

Re: Работа с атрибутивными таблицами

Сообщение destribution » 31 авг 2014, 09:49

Извиняюсь за оценку, случайно оценил Ваш пост. То что Вы описали, полезная информация, но для требуемой задачи это не совсем то что нужно.
Вероятнее всего я не так изложил ситуацию. Для полной ясности прикладываю скриншот таблицы.
Ещё раз попытаюсь объяснить. Дело в том, что данные для колонки "№" взять негде, а в неё требуется внести порядковый номер, при этом для каждого из значений колонки "KV", он должен начинаться сначало...
В результате вот чего ожидаю...
KV №
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
Вложения
Безымянный.jpg
Безымянный.jpg (114.02 КБ) 9202 просмотра

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

Re: Работа с атрибутивными таблицами

Сообщение nadiopt » 31 авг 2014, 10:09

знакомая ситуация
я делаю очень коряво. экспортирую в эксель. потом завожу колонку "да или нет", в ней логическое выражение "kv= [предыдущая строка]". Ну и в колонке номер - Если да, то номер равен предыдущей строке+1. если нет, то номер равен 1. вот как-то так. и подсоединяю назад по FID
ин гроссен фамилен нихт клювен клац клац

lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: Работа с атрибутивными таблицами

Сообщение lam » 31 авг 2014, 10:14


destribution
Участник
Сообщения: 68
Зарегистрирован: 30 авг 2014, 11:11
Репутация: 0

Re: Работа с атрибутивными таблицами

Сообщение destribution » 31 авг 2014, 12:15

nadiopt писал(а):знакомая ситуация
я делаю очень коряво. экспортирую в эксель. потом завожу колонку "да или нет", в ней логическое выражение "kv= [предыдущая строка]". Ну и в колонке номер - Если да, то номер равен предыдущей строке+1. если нет, то номер равен 1. вот как-то так. и подсоединяю назад по FID
А вы не могли бы отправить пример excel таблицы ?

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

Re: Работа с атрибутивными таблицами

Сообщение nadiopt » 31 авг 2014, 14:50

простите ради Бога за корявость, не нашла правильно написанного кода (когда-то писала, но уже не помню). пока придумался такой костыль:
1) включаем в Эксель стиль формул R1C1 (как на картинке)
2) заводим первую строку "нулевой квартал", иначе не сработает
3) в следующей строке (1 квартал 1 выдел) прописываем в колонке "да или нет" формулу: =RC[-1]=R[-1]C[-1]
4) тянем до низу
5) фильтруем значения "ложь"
6) прописываем номер выдела = 1
7) фильтруем значения "истина"
8) прописываем в первой строке формулу =R[-1]+1
ну и присобачиваем обратно по FID
Вложения
2014-08-31 15-25-33 Скриншот экрана.png
2014-08-31 15-25-33 Скриншот экрана.png (80.73 КБ) 9122 просмотра
пример.rar
(8.79 КБ) 234 скачивания
ин гроссен фамилен нихт клювен клац клац

destribution
Участник
Сообщения: 68
Зарегистрирован: 30 авг 2014, 11:11
Репутация: 0

Re: Работа с атрибутивными таблицами

Сообщение destribution » 03 сен 2014, 14:04

Всех благодарю за совет!
Воспользовался методом от nadiopt
nadiopt Вам отдельное спасибо, за столь подробные разъяснения.

doujin
Активный участник
Сообщения: 163
Зарегистрирован: 28 июн 2012, 01:02
Репутация: 84
Откуда: Vladivostok

Re: Работа с атрибутивными таблицами

Сообщение doujin » 04 сен 2014, 01:42

На мой взгляд lam указал более правильное направление для решения этой задачи. Предлагаю (опять таки на мой взгляд) более удобный скрипт на python для калькулятора поля чем тот, что приведен в справке:

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

def get_counter(field_value, start_from=1, interval=1, d={}):
    start_from -= interval
    counter = d.setdefault(field_value, start_from) + interval
    d[field_value] = counter
    return counter
Он сам учтет разные значения в поле, а еще ему не обязательно, что бы эти значения были сгруппированы и шли подряд.
Вызываем, если нужно начинать с 1 и с шагом 1, так:

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

get_counter( !Field1! )
Для иного начального значения и шага, например, начиная с 2 и с шагом 3, так:

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

get_counter( !Field1!, 2, 3 )
P.S. Знаю, что предлагаю решение уже после того, как задача решена, но может кому-то в будущем оно пригодится.
Последний раз редактировалось doujin 05 сен 2014, 07:36, всего редактировалось 1 раз.

destribution
Участник
Сообщения: 68
Зарегистрирован: 30 авг 2014, 11:11
Репутация: 0

Re: Работа с атрибутивными таблицами

Сообщение destribution » 05 сен 2014, 05:32

Согласен, lam дал правильное направление, но к сожалению я так и не смог допонять как всё таки выполнить такую операцию. И на этот раз, по вашему предложению не смог использовать указанные выражения.

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

get_counter( !Field1! )

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

get_counter( !Field1!, 2, 3 )
Вставляю указанные выражения в калькулятор и в ходе обработки возникает ошибка.
Для того чтобы выражение сработао вместо !Field1! подставлял !KV 1!, возможно в этом кроется ошибка ?

doujin
Активный участник
Сообщения: 163
Зарегистрирован: 28 июн 2012, 01:02
Репутация: 84
Откуда: Vladivostok

Re: Работа с атрибутивными таблицами

Сообщение doujin » 05 сен 2014, 07:45

Без описания ошибки сложно сказать, что пошло не так.
Возможно, дело в кавычке, которая затесалась в мой код из предыдущего поста. Только сейчас обратил на это внимание и исправил. Досадная оплошность.
Либо вы как-то неправильно вызываете калькулятор.
Спойлер
Изображение
показал, на что стоит обратить внимание, и куда вносить соответствующий код. Имя поля вы правильно вписали. Больше и не знаю, что предположить.

destribution
Участник
Сообщения: 68
Зарегистрирован: 30 авг 2014, 11:11
Репутация: 0

Re: Работа с атрибутивными таблицами

Сообщение destribution » 06 сен 2014, 06:57

doujin, отличное решение, всё получилось как надо! В будущем сбережёт много времени и терпения :)
спасибо :wink:

Ответить

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

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

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