Здравствуйте! Кто должен делать вызов mapSetMarkerPosition(HMAP hmap, DOUBLEPOINT * position)? Я так предполагаю это должна делать сама библиотека, когда я вожу мышкой по карте. Я же должен всего лишь повесить с помощью mapSetMarkerPositionCallAndParm функцию которая будет дергаться при изменении координат, и делать в этой функции необходимые мне вещи, например запрашивать координаты указателя мыши с помощью mapGetMarkerPosition. Но такой подход не работает, потому как никто не вызывает mapSetMarkerPosition!!! Как на самом деле должно это работать? И как мне без собственных костылей с пересчетом экранных координат курсора в СК карты получить координаты курсора в СК карты?
Просьба на будущее - всегда указывать информацию о том, к чему относится вопрос. Для ответа важна следующая информация: - что разрабатывается (самостоятельное ГИС-приложение или прикладная задача для ГИС Панорама/ГИС Опреатор); - какой именно инструментарий/SDK используется (GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Qt, чистый MAPAPI, PANTASK); - среда разработки; - под какую ОС выполняется разработка; - разрядность приложения.
Цитата
Евгений Соболев написал: Я так предполагаю это должна делать сама библиотека, когда я вожу мышкой по карте.
Совсем нет. Библиотека не имеет никакого понятия ни об окнах, где Вы отображаете карту, ни о положении курсора в них.
/*********************************************************
ФУНКЦИИ СИНХРОНИЗАЦИИ ЗАДАЧ ПО КООРДИНАТАМ ТОЧКИ
Некоторая задача может менять координаты курсора,
а другая будет получать уведомления о смене координат
*********************************************************/
// Установить текущие координаты курсора для карты
// hmap - идентификатор открытой карты (документа)
// position - координаты курсора в текущей системе координат документа
// Если position равно нулю, то координаты считаются не установленными
_MAPIMP void _MAPAPI mapSetMarkerPosition(HMAP hmap, DOUBLEPOINT * position);
// Запросить текущие координаты курсора для карты
// hmap - идентификатор открытой карты (документа)
// position - координаты курсора в текущей системе координат документа
// Если координаты не установлены, или параметры ошибочные, то возвращает ноль
_MAPIMP long int _MAPAPI mapGetMarkerPosition(HMAP hmap, DOUBLEPOINT * position);
// Установить адрес функции, которая будет периодически
// вызываться при смене координат курсора (вызове mapSetMarkerPosition)
// Для запроса координат необходимо вызвать mapGetMarkerPosition
// call - адрес вызываемой функции (см. maptype.h),
// parm - параметр, который будет передан вызываемой функции
// При завершении задачи, установившей адрес функции оповещения,
// необходимо еще раз вызвать функцию с нулевыми параметрами
// call и parm.
_MAPIMP void _MAPAPI mapSetMarkerPositionCallAndParm(HMAP hmap, BREAKCALL call,
void * parm);
Указанный набор функций предназначен для обеспечения возможности передачи текущих координат курсора от активной задачи - задаче, работающей в фоновом режиме и "подписанной" на такие уведомления. То есть библиотека выступает только как посредник такого вызова.
Пример использования: синхронное позиционирование 3D-модели по данным от прикладной задачи работы с GPS-приемником в ГИС Панорама.