Информация о раскраске в атрибутику в виде значений RGB

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
dopg
Новоприбывший
Сообщения: 10
Зарегистрирован: 22 фев 2012, 11:04
Репутация: 0

Информация о раскраске в атрибутику в виде значений RGB

Сообщение dopg » 31 окт 2012, 05:18

Здравствуйте.
Есть множество полигонов разных цветов, необходимо перенести в атрибутику информацию о раскраске в виде значений RGB? При помощи MapInfo 10 либо ArcInfo 9.
p.s. Задача полигоны tab экспортировать в shp, т.к раскраска в shp не передается нужно информацию о раскраске сохранить в атрибутике в виде значений RGB.

Аватара пользователя
Пётр Дубоделов
Завсегдатай
Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58
Репутация: 12
Откуда: Бурашево
Контактная информация:

Re: Информация о раскраске в атрибутику в виде значений RGB

Сообщение Пётр Дубоделов » 31 окт 2012, 08:45

Из справочника по командам mapbasic11:
Функция ObjectInfo( )
Назначение
Возвращает стиль линии, штриха и другие величины, описывающие графический объект, а
также его тип. Эту функцию можно вызывать в окне MapBasic в среде MapInfo Professional.
Синтаксис
ObjectInfo( object, attribute )
object – это выражение для объекта.
attribute – целое, задающее тип возвращаемой информации.
при синтаксисе

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

ObjectInfo( obj, 3)
выдаёт значение типа штриховки для полигонов вида Brush (12, 16770192, 16777215). Если заливка сплошная - искомое значение 16770192 - является целочисленным цветом mapinfo, который программа получает так:
( red * 65536) + ( green * 256) + blue
остаётся придумать калькулятор для обратного преобразования в RGB. на glab2007 такой имеется отдельной программкой, которая предполагает считать через GUI по одному числу за раз. Тут скорее нужна составная функция, чтоб не выходя из Mapinfo пересчитывать через "обновление колонки".

PS:
чтобы выделить только второй аргумент из Brush(a,b,c) использовал такое выражение форматирования:

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

Mid$(Str$(ObjectInfo(obj, 3)), (Instr(9, Str$(ObjectInfo(obj, 3)), " ")+1), ((Instr(12, Str$(ObjectInfo(obj, 3)), ","))-(Instr(9, Str$(ObjectInfo(obj, 3)), " "))-1))
"Если карта не соответствует местности, доверяй местности."

V.Maxim
Участник
Сообщения: 62
Зарегистрирован: 14 фев 2012, 16:07
Репутация: 13

Re: Информация о раскраске в атрибутику в виде значений RGB

Сообщение V.Maxim » 31 окт 2012, 13:32

Думаю можно все же немного проще достать цвет, StyleAttr в помощь нам

Тогда все действие в общем виде сведется к:

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

Dim r,g,b,color As Integer
Color = StyleAttr(ObjectInfo(table.obj, 3),2)
r = color \ 65536
g = (color - (r * 65536)) \ 256
b = (color - (r * 65536) - (g * 256))
Ну тут уж либо в MB оформить, либо самой MI можно создать 4 колонки и поочередно заполнить по сему алгоритму. PROFIT ! :D

Ответить

Вернуться в «Общие вопросы»

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

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