Страница 1 из 1

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

Добавлено: 13 апр 2015, 22:01
tems-ya
Доброго времени суток!

Требуется по-человечески раскрасить 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

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

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

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

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

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

Добавлено: 14 апр 2015, 09:23
LightMen
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

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

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

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

Добавлено: 14 апр 2015, 12:35
LightMen
Попробуй код.
весь секрет в - where rowid=i и while not eot(tempTable)
(в for будет по одному объекту перебирать)

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

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