Python для перевода индексов почв в полноценные названия

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Python для перевода индексов почв в полноценные названия

Сообщение dime1 » 29 сен 2015, 12:28

Добрый день.
Никто не сталкивался с задачей после векторизации почвенной карты перевести индексы в колонку с полноценным названием почв? Подскажите пожалуйста, как это можно реализовать.

Вот примеры индексов, которые нужно распознать c расшифровкой:
10+133F+138
"10": "Дерново-средне и-сильно подзолистые глеевые супесчаные и суглинистые почвы",
"133": "Болотные почвы",
"F": "Водно-ледниковые отложения",
"138": "Торфяники низинные",
Дерново-средне и-сильно подзолистые глеевые супесчаные и суглинистые почвы в комплексе с Болотные почвы на Водно-ледниковые отложения в комплексе с Торфяники низинные (можно без соблюдения окончаний и прочего)
Спойлер
17L-аб
"17": "Светло-серые оподзоленные почвы",
"L": "Лёссы и лёссовидные суглинки",
"а": "Слабосмытые",
"б": "Среднесмытые",
Светло-серые оподзоленные почвы на Лёссы и лёссовидные суглинки Слабосмытые Среднесмытые

112 | +133L
"112": "Чернозёмно-луговые поверхностно-слабосолонцеватые почвы",
"|": "Слабосолончаковые",
"133": "Болотные почвы",
Чернозёмно-луговые поверхностно-слабосолонцеватые почвы Слабосолончаковые в комплексе с Болотные почвы

118al
"118": "Луговые почвы",
"al": "Аллювий современный",
Луговые почвы на Аллювий современный

133 |
"133": "Болотные почвы",
"|": "Слабосолончаковые",
Болотные почвы Слабосолончаковые
Мне кажется, что это можно это как-то прописать в Python (но опыта еще нет), чтоб не писать вручную для 2000 полигонов: либо, чтоб он сразу последовательно переводил индекс в слова (но словарь и метод .get() не понимает комплексные названия, а распознаёт лишь первый символ), либо сначала разбить строку на несколько, а потом "собрать" название.
P.S.: Думаю, это может быть актуально как для почвенных карт, так и для геологических.
Последний раз редактировалось dime1 08 окт 2015, 14:50, всего редактировалось 1 раз.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Python для перевода индексов почв в полноценные названия

Сообщение Ariki » 29 сен 2015, 13:07

Самое простое - разбить строку регулярными выражениями, а потом уже транслировать составные части с помощью словарей или любым удобным способом.

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Python для перевода индексов почв в полноценные названия

Сообщение dime1 » 29 сен 2015, 13:48

Ariki, спасибо еще раз за разъяснение по Python. Попробую теперь и посмотрю результаты.

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Python для перевода индексов почв в полноценные названия

Сообщение dime1 » 30 сен 2015, 15:13

Создал 3 колонки (максимальное количество сочетаний почв), и разделил индекс (поле ABR) выражениями

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

!ABR!.split("+")[0]
!ABR!.split("+")[1]
!ABR!.split("+")[-1]
соответственно для каждой из них.
Теперь нужно как-то избавится от дубликатов в строках колонок. А то там где был лишь 1 тип почв, получилось, что он прописался во все 3 колонки. И если сейчас транслировать в колонки текст, объединяя, получу тройное название.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Python для перевода индексов почв в полноценные названия

Сообщение Ariki » 02 окт 2015, 16:13

Можно так:

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


!ABR!.split('+')[2] if len(!ABR!.split('+')) > 2 else None

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Python для перевода индексов почв в полноценные названия

Сообщение dime1 » 08 окт 2015, 14:50

Разбив почвы на 3 колонки, инструментом Frequency посмотрел все уникальные значения ("133, 133al, 133A" и т.д.), попрописывал их расшифровки в "словарь" и для каждой из колонок методом .get() получил полноценные названия (кириллицу пришлось переводить в латиницу, а то Py не воспринимал такие индексы).
Потом объединил колонки в новой (сначала отсортировал комплекс из 3 почв и т.д.). Дальше сделал метод .lower() и .capitalize().

Ответить

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

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

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