MapBasic таймер

MapInfo, MapBasic
Ответить
iBorkk
Новоприбывший
Сообщения: 2
Зарегистрирован: 03 фев 2012, 12:52
Репутация: 0

MapBasic таймер

Сообщение iBorkk » 03 фев 2012, 13:31

Здравствуйте, стоит задача отображения местоположения точек из БД PostgreSQL.
MapInfo с БД соединил, точки отображаются, но при изменении (или добавлении) данных в таблице, на карте (и в самой программе) ничего не меняется. При вызове функции Server Refresh все обновляется, но не могу придумать, как сделать, чтобы эта функция вызывалась раз в секунду.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: MapBasic таймер

Сообщение dab » 03 фев 2012, 14:21

Предлагаю Server Refresh разместить в обработчике событий изменения изображения в окне карты - WinChangedHandler. Изменение масштаба или сдвиг изображения будет обновлять отображаемые данные.

iBorkk
Новоприбывший
Сообщения: 2
Зарегистрирован: 03 фев 2012, 12:52
Репутация: 0

Re: MapBasic таймер

Сообщение iBorkk » 06 фев 2012, 18:57

Подходит, но нужно, чтобы таблица обновлялась примерно раз в секунду, чтобы текущее местоположение отображалось. И человек следил за отображением этого без всяких действий с его стороны.
Пробовал обновлять в бесконечном цикле, но это убивает MapInfo... Может, можно в другом потоке запустить?
Может еще какие-нибудь идеи?

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: MapBasic таймер

Сообщение dab » 10 фев 2012, 06:21

iBorkk писал(а):...Может еще какие-нибудь идеи?
Сделать DDE клиента на C/Delphi/VB/... . Mapinfo в качестве DDE сервера.
На клиенте таймер, через DDE отправлять Mapinfo команду Refresh.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: MapBasic таймер

Сообщение Boris » 10 фев 2012, 09:26

А стандартный механизм

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

Add Map  
	[ Window window_id ] [ Auto ]   
	Layer table [, table   [ Animate ]
не делает искомое? Я понимаю, что есть различие между простой таблицей и таблицей из БД, но может все таки сработает?
Using Animation Layers to Speed Up Map Redraws
If the Add Map statement includes the Animate keyword, the added layer becomes a special layer known as the animation layer. When an object in the animation layer is moved, the Map window redraws very quickly, because MapInfo Professional only redraws the one animation layer.

For an example of animation layers, see the sample program ANIMATOR.MB.

The animation layer is useful in real-time applications, where map features are updated frequently. For example, you can develop a fleet-management application that represents each vehicle as a point object. You can receive current vehicle coordinates by using GPS (Global Positioning Satellite) technology, and then update the point objects to show the current vehicle locations on the map. In this type of application, where map objects are constantly changing, the map redraws much more quickly if the objects being updated are stored in the animation layer instead of a conventional layer.

The following example opens a table (Vehicles) and makes the table an animation layer:

Open Table "vehicles" Interactive
Add Map Layer vehicles Animate
In general, the last table to be followed by the Animate keyword will be the animation layer. Only one layer at a time can be the Animation layer.

To terminate the animation layer processing, issue a Remove Map statement Layer Animate statement.

Animation layers have special restrictions. For example, users cannot use the Info tool to click on objects in an animation layer. Also, each Map window can have only one animation layer. For more information about animation layers, see the MapBasic User's Guide

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: MapBasic таймер

Сообщение dab » 10 фев 2012, 09:47

Сомневаюсь, т.к. Animate влияет только на скорость отображения/перерисовки анимированного слоя в карте. "... Speed Up Map Redraws...", т.е. отображения объектов из файла таблицы на окне карты.
А здесь проблема в постоянном обновлении локальной таблицы из таблицы, хранящейся на сервере.
Если только, таблица есть не локальная копия, а "хранимая в памяти" - тогда должно сработать.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: MapBasic таймер

Сообщение Boris » 10 фев 2012, 14:44

Т.е. проблема в обновлении данных именно в локальной копии, которую мапифно создает для таблиц с сервера? Я думал они эту часть давно поправили и работают с серверами без лишних "прокладок"...

Ответить

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

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

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