построение label expression

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Аватара пользователя
julia
Новоприбывший
Сообщения: 3
Зарегистрирован: 28 ноя 2013, 21:00
Репутация: 0
Откуда: Krasnodar

построение label expression

Сообщение julia » 28 ноя 2013, 21:06

Помогите, пожалуйста решить такую задачу. С построением выражений раньше не сталкивалась, да и вообще, если честно, в написании чего-либо на python или VBScript я не сильна.
Ситуация следующая, в поле, по которому я ставлю подписи, находится полный адрес зданий, а мне надо вычленить только номера домов + литер. Вот пример одного из адресов: Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А. Как мне из всего этого получить 21А?
Спасибо заранее!

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

Re: построение label expression

Сообщение doujin » 29 ноя 2013, 03:16

Если у вас действительно все записи оформлены как "Санкт-Петербург, город Петергоф, улица Дзержинского, дом 21, литер А", то есть части адреса разделены запятыми, литера и дом идут последними, а части внутри имеют пробел, то можно использовать следующий код на python:

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


def FindLabel ( [field1] ):
s = [field1]
sub_s1 = s.split(u',')[-1].split(u' ')[-1]
if sub_s1.isnumeric():
return sub_s1
else:
sub_s2 = s.split(u',')[-2].split(u' ')[-1]
return sub_s2 + sub_s1

В окне составления выражения поставьте галочку Advanced и скопируйте туда код. Замените field1 на название вашего поля с адресами. В качестве парсера не забудьте выбрать python.

Аватара пользователя
julia
Новоприбывший
Сообщения: 3
Зарегистрирован: 28 ноя 2013, 21:00
Репутация: 0
Откуда: Krasnodar

Re: построение label expression

Сообщение julia » 29 ноя 2013, 18:13

Спасибо, за помощь, но выражение не срабатывает. Выкидывает ошибку:
---------------------------
ArcMap
---------------------------
The expression contains an error.
Modify the expression and try again.

Error 0 on line 0.
Error running expression: FindLabel(ESRIExpressionArg0)
Traceback (most recent call last):
File "<expression>", line 1, in <module>
File "<string>", line 7, in FindLabel
IndexError: list index out of range
.
---------------------------
OK
---------------------------

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

Re: построение label expression

Сообщение doujin » 29 ноя 2013, 22:59

Значит у вас не все записи соответствуют шаблону. Судя по ошибке, есть строки, в которых вообще нет запятых. Можно поправить скрипт так:

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

def FindLabel ( [field1] ):
s = [field1]
if u',' in s:
sub_s1 = s.split(u',')[-1].split(u' ')[-1]
sub_s2 = s.split(u',')[-2].split(u' ')[-1]
else:
sub_s1 = sub_s2 = u''
if sub_s1.isnumeric():
return sub_s1
else:
return sub_s2 + sub_s1

Аватара пользователя
julia
Новоприбывший
Сообщения: 3
Зарегистрирован: 28 ноя 2013, 21:00
Репутация: 0
Откуда: Krasnodar

Re: построение label expression

Сообщение julia » 01 дек 2013, 20:42

Спасибо огромное!! Второй скрипт сработал отлично, все получилось!

Ответить

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

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

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