Цитата |
---|
Victor Fedyashev пишет: Функционал конечно по теме, но частично и как его использовать в Delphi с библиотекой gisacces.dll? |
Вхожу в папку с исходными текстами GIS ToolKit.
Запускаю поиск по имени функции mapSideDirection:
Нахожу MAPAPI.INC:
// Вычисление дирекционного угла участка объекта (стороны)
// Возвращает величину угла в радианах
// Для последней точки вычислет направление на первую точку
// У замкнутых объектов перва и последн точки совпадают
// Obj - идентификатор объекта карты в памяти
// number - номер точки; начиная с 1
// subject - номер подобъекта (если = 0; обрабатывается объект)
// При ошибке возвращает 0 (при совпадении точек также)
function mapSideDirection(Obj:HObj;number:integer;
subject:integer):double;
{$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF};
external sGisAcces;
Эти функции есть и в свойствах компонента объекта.
Только Вам ничего поворачивать не нужно.
Первая точка - это координаты объекта.
Вторая точка - это направление объекта.
Если у Вас есть объект трасса, то Вы вызываете функцию:
Код |
---|
// Найти точку на контурах объекта и подобъектов,
// ближайшую к заданной
// hMap - идентификатор открытой карты,
// info - идентификатор объекта в памяти
// pointin - координаты точки в прямоугольной
// системе координат , в метрах на местности
// Возвращает номер точки метрики за которой расположена
// точка на контуре или ноль при ошибке
// Координаты точки (в метрах) помещаются по адресу pointout
_MAPIMP long int _MAPAPI mapSeekNearVirtualPoint(HMAP hMap, HOBJ info,
DOUBLEPOINT * pointin, DOUBLEPOINT * pointout);
|
чтобы притянуть объект к трассе (если он рядом).
Вторую точку можно взять на трассе рядом с объектом или использовать азимут, который снимается с навигатора вместе с координатами (это лучше, поскольку реально).
Если брать вторую точку с трассы, то можно использовать возвращаемое значение из функции mapSeekNearVirtualPoint - номер точки. Стало быть Вам нужно взять координаты точки на одну меньше (если едете к началу трассы) или на одну больше (если едете к концу трассы).
Дальше сами додумывайте.