Как изменить стиль объекта на карте (в таблице) на MapBasic

MapInfo, MapBasic
Ответить
tems-ya
Интересующийся
Сообщения: 39
Зарегистрирован: 28 янв 2015, 22:07
Репутация: 1
Откуда: Воронеж

Как изменить стиль объекта на карте (в таблице) на MapBasic

Сообщение tems-ya » 13 апр 2015, 22:01

Доброго времени суток!

Требуется по-человечески раскрасить OSM карты после затягивания *.shp в MapInfo. Руками уже надоело, уже не интересно. Идея тупая и без фантазии. Делаю так:

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

Sub Convert_highway
	
    Dim COLOR as Integer
    Dim i_mapid As Integer

  Close All Interactive

  Open TABLE "highway" Interactive
  Map From highway
  Set Map Layer 1  EDITABLE On 
  i_mapid = FrontWindow()
  
  Select * from highway where Highway = "secondary" Or Highway = "secondary_link" or Highway = "tertiary" or Highway =    "tertiary_link"
 
  
  COLOR = RED
  Set Style Pen MakePen(1,2,COLOR)
  Update Window i_mapid
  
End Sub

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

Помогите советом. Или подскажите как правильно. Может так вообще делать нельзя. Тогда как автоматизировать.

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Как изменить стиль объекта на карте (в таблице) на MapBa

Сообщение thegeo » 13 апр 2015, 23:26

Оператор Select возвращает таблицу выборки и именно для нее нужно выполнять преобразования объектов. Получить ссылку на эту таблицу можно:
• добавив предложение Into в Select;
• через оператор SelectionInfo.
Далее организуете цикл по объектам этой таблицы и к каждому объекту применяете оператор Alter Object. Это типовое решение задачи. Существуют и другие возможности.
PS. Делать слой редактируемым нет никакой необходимости.

LightMen
Интересующийся
Сообщения: 32
Зарегистрирован: 09 окт 2014, 10:59
Репутация: 5

Re: Как изменить стиль объекта на карте (в таблице) на MapBa

Сообщение LightMen » 14 апр 2015, 09:23

1) выдели нужные объекты и помести их в таблицу tempTable
2) установи значения Brush и Pen, передай их в функцию
Спойлер

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

'цвет заливки полигона
'rgb(красный,зелёный,синий)
  pBrush=MakeBrush(2, rgb(252,250,232),"")
'цвет контура полигона
  pPen=MakePen(1,2,rgb(205,201,188))
3) запусти выполнение кода
Спойлер

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

sub ColorBrush(ByVal pBrush as Brush, ByVal pPen as Pen)				
    Dim obj1 as Object
    Dim i as integer
    i=1    
    fetch first from tempTable             
    do while not eot(tempTable)
      obj1=tempTable.obj
	  Alter Object obj1 Info OBJ_INFO_BRUSH, pBrush
	  Update tempTable set obj=Obj1 where rowid=i	
	  
	  Alter Object obj1 Info OBJ_INFO_PEN, pPen
	  Update tempTable set obj=Obj1 where rowid=i		  	
	  
	  fetch next from tempTable
	  i=i+1
    Loop	    
End Sub

tems-ya
Интересующийся
Сообщения: 39
Зарегистрирован: 28 янв 2015, 22:07
Репутация: 1
Откуда: Воронеж

Re: Как изменить стиль объекта на карте (в таблице) на MapBa

Сообщение tems-ya » 14 апр 2015, 10:44

То что в цикле по одной строчке можно сделать что угодно, я понимаю. Мне хотелось избежать такого подхода, ведь когда я применяю стиль линий в ручном режиме к выделенному фрагименту, все срабатывает сразу. Как добиться такого же эффекта на MB?

LightMen
Интересующийся
Сообщения: 32
Зарегистрирован: 09 окт 2014, 10:59
Репутация: 5

Re: Как изменить стиль объекта на карте (в таблице) на MapBa

Сообщение LightMen » 14 апр 2015, 12:35

Попробуй код.
весь секрет в - where rowid=i и while not eot(tempTable)
(в for будет по одному объекту перебирать)

juffin_h
Завсегдатай
Сообщения: 265
Зарегистрирован: 22 окт 2012, 08:35
Репутация: 49
Откуда: Нижний Новгород

Re: Как изменить стиль объекта на карте (в таблице) на MapBa

Сообщение juffin_h » 15 апр 2015, 08:27

tems-ya писал(а):когда я применяю стиль линий в ручном режиме к выделенному фрагименту, все срабатывает сразу
Можно считать это бонусом.
tems-ya писал(а):Как добиться такого же эффекта на MB?
Никак. Команда Set Style в MB таких бонусов не имеет. Делает только то, что должна - устанавливает текущий стиль.

Ответить

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

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

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