На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Поворот карты

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Поворот карты
 
Необходимо поворачивать векторную карту на фиксированное значение угла: 0, 90, 180 и 270 градусов. Для этого использую функцию:
Код
_MAPIMP double _MAPAPI mapSetupTurn(HMAP hmap, double angle, double fixation);
Значения angle задаю:
Код
0, M_PI / 2, M_PI, 3 * M_PI / 2
И постоянное значение fixation: M_PI / 18.
Однако карта рисуется адекватно только при значениях 0 и M_PI градусов, при всех остальных в зависимости от изменения масштаба карта перерисовывается с артефактами, без большинства слоёв и объектов.

Данное поведение наблюдается в "ГИС Конструктор Free для Qt Designer" как на версии:
Код
// Версия библиотеки MapAccess
// (если применяется "mapacces.h" и т.п.)
#define MAPACCESSVERSION  20160418


// Версия интерфейса MAPAPI и ядра библиотеки
#define MAPAPIVERSION  0x0111302
Так и на:
Код
// Версия библиотеки MapAccess
// (если применяется "mapacces.h" и т.п.)
#define MAPACCESSVERSION  20160605

// Версия интерфейса MAPAPI и ядра библиотеки
#define MAPAPIVERSION  0x0111304
Использовал карту Подольска и пару бесплатных карт на основе OSM с сайта.
 
Небольшое уточнение: использую только MAPAPI и однопоточную отрисовку с помощью функции
Код
_MAPIMP long int _MAPAPI mapPaintToXImage(HMAP hmap, XIMAGEDESC *imagedesc, long int x, long int y, RECT *rect);
 
Приведу описание функции из mapapi.h:

Код
 // Функция настройки отображения карты с поворотом
 //  hmap     - идентификатор открытых данных
 //  angle    - угол поворота карты в плане с вершиной в
 //             юго-западном углу карты (от -Pi до Pi)
 //  fixation - угол сектора фиксации поворота отображения карты
 //             относительно предыдущего положения (от 0 до Pi/6).
 //             По умолчанию = Pi/18 (10 градусов)
 // Угол fixation используется для минимизации дрожания изображения
 // при движении по повернутой карте по прямой (или почти по прямой),
 // когда при последовательном вызове функции подаются близкие
 // значения угла поворота (angle). В случае, если разность между
 // текущим углом поворота и требуемым будет меньше fixation,
 // то новый угол поворота не устанавливается.
 // Возвращает значение установленного угла поворота.
 // При ошибке возвращает 0

_MAPIMP double _MAPAPI mapSetupTurn(HMAP hmap, double angle, double fixation);
 
И? Вы хотите сказать, что чтобы задать значение 270 градусов, нужно использовать -M_PI / 2? Так я тоже пробовал, но результат не изменился, да и при значении M_PI / 2 те же артефакты.
Или вы на что-то другое намекаете? :)
 
Проверил на ГИС Конструктор для AstraLinux с нашего сайта.
Проблем нет в экранном и принтерном видах.
Устанавливал поворот: M_PI / 2, M_PI, 3 * M_PI / 2
Попробуйте проверить на версии с сайта.
 
С версией с сайта та же проблема, в том числе с версией 12. Значит буду искать ошибку у себя.
 
Если габариты карты в паспорте карты не установлены или имеют ошибочные значения, то при включении поворота часть объектов будет пропадать и обрезаться.
 
Цитата
Oleg Belenkov написал:
Если габариты карты в паспорте карты не установлены или имеют ошибочные значения, то при включении поворота часть объектов будет пропадать и обрезаться.
Впервые такие артефакты заметил на карте Подольска, думаю паспорт этой карты должен быть корректным :)
 
Есть ли возможность создания простого примера, демонстрирующего некорректное поведение?
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности