Цветовая палетка для глубин

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
angelok
Активный участник
Сообщения: 184
Зарегистрирован: 05 июн 2013, 11:45
Репутация: 0

Цветовая палетка для глубин

Сообщение angelok » 31 мар 2014, 15:32

Привет, всем ГИСовцам!
У меня такой вопрос:
Есть шейп с точками глубины необходимо раскрасить цифры по определенной палетке. Цвет зависит от глубины. Как можно это сделать? Была идея создать классы на каждое значение, но.. .. это очень долго.
Может у кого есть еще идеи?
Заранее спасибо.
Вложения
Глубины.png
примерный результат
Глубины.png (59.87 КБ) 4186 просмотров

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

Re: Цветовая палетка для глубин

Сообщение doujin » 31 мар 2014, 16:02

Правильно, на мой взгляд, было бы таки создавать отдельные классы подписей в свойствах слоя. Что бы упростить задачу, можно разбить слой по значениям в поле с глубиной. Потом назначить их как классы подписей, и настроить (раскрасить). В ArcGIS усть довольно удобный интерфейс для таких манипуляций: Построение классов надписей из классов символов.
Либо же использовать упоминавшуюся разбивку слоя и точечным символам в качестве условного знака поставить символ с соответствующей цифрой. Потом их соответственно раскрасить.

angelok
Активный участник
Сообщения: 184
Зарегистрирован: 05 июн 2013, 11:45
Репутация: 0

Re: Цветовая палетка для глубин

Сообщение angelok » 01 апр 2014, 06:27

Долгий путь все таки. Но всеравно спасибо!

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

Re: Цветовая палетка для глубин

Сообщение doujin » 01 апр 2014, 08:55

Если классы подписей из классификации слоя уже сделали, могу помочь с раскраской:

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

def linear_gradient(start_color, finish_color, n):
# за функцию градиента благодарим http://bensouthgate.com/p/12_3_13.php
s = start_color
f = finish_color
colors =
for t in range(1, n):
v = tuple(int(s[j]+(float(t)/(n-1))*(f[j]-s[j])) for j in range(3))
colors.append(v)
return colors
# запускаем код из консоли карты
mxd = arcpy.mapping.MapDocument('CURRENT')
# обрабатываемый слой должен быть первым в таблице содержания
lyr = arcpy.mapping.ListLayers(mxd)[0]
# RGB цвет для наименьшего значения
start_color = (190, 232, 255)
# RGB цвет для наибольшего значения
finish_color = (0, 132, 168)
number_of_colors = len(lyr.labelClasses)
colors = linear_gradient(start_color, finish_color, number_of_colors)
for color, lable in zip(colors, lyr.labelClasses):
# визуальное оформление надписей можно менять за счет выражения
style_on = "<CLR red='{0}' green='{1}' blue='{2}'>".format(*color)
style_off = "</CLR>"
lable.expression = '"{0}" & {1} & "{2}"'.format(style_on, lable.expression, style_off)
arcpy.RefreshActiveView()
Другие настройки надписей в python, к сожалению, не доступны.
P.S. Скрипт написал "на коленке", но он работает. И общую идею, я думаю, можно понять.

Ответить

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

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

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