4. Отображаем карту. 5. Перемещаем... 6. Масштабируем: Ожидаемая реакция: масштабирование приводит к изменению только масштаба Фактическая реакция: масштабирование приводит к переносу отображения в другую позицию и изменение масштаба Наблюдения: Выгрузка слоя не изменяет внутренних пиксельных размеров карты и, соответственно, хранимых координат центра экрана относительно фактических в библиотеках, до момента изменения масштаба. После изменения масштаба происходит некий внутренний процесс, который пересчитывает размеры карты и приводит к несоответствию хранимых пиксельных координат относительно фактических в библиотеке, что приводит к последующему некорректному отображению карты в точке, соответствующей другим географическим координатам.
Если этот баг в новой версии решён, то прошу "понять и простить". ЗЫ: В рабочем проекте я обошёл эту проблему костылём.
Не совсем понятно что именно Вы считаете ошибкой, но суть понятна. Да, при изменении масштаба меняются габариты карты, в случае если необходимо (добавились объекты, которые выходят за пределы текущей области карты). Поэтому не стоит привязываться к координатам в пикселях. Если очень хочется привязаться к пикселям, то можно считать не от левого верхнего угла, а, например, от центра карты.
Я когда решил поставить последний пакет вообще получил пользовательские карты с рамкой на всю планету, два дня искал проблему (проявлялась после первого масштабирования), потом просто откатил пакет gisdesigner на предыдущую версию и всё снова заработало как часы.
Не совсем понятно что именно Вы считаете ошибкой, но суть понятна. Да, при изменении масштаба меняются габариты карты, в случае если необходимо (добавились объекты, которые выходят за пределы текущей области карты). Поэтому не стоит привязываться к координатам в пикселях. Если очень хочется привязаться к пикселям, то можно считать не от левого верхнего угла, а, например, от центра карты.
С уважением, Матвеев П.В.
Пиксели у нас используются для внутреннего хранения и для перемещения карты (мышка к сожалению даёт не градусы, а пиксели), для перерисовки карты в определённых координатах мы каждый раз пересчитываем географические координаты в пиксельные для отображения в нужном месте. Поэтому если дополнительная карта выгружена, то размеры нужно сразу пересчитывать, а не ждать изменения масштаба, потому что потом пользователь начинает масштабировать и у него слетает отображение. ИМХО.
Я понимаю почему Вы используете пиксели) я тоже использовал их для хранения верхнего левого угла карты внутри элемента управления. Потом перешел на plane. Мышка дает вам пиксели, конечно, но пиксели относительно элемента управления или дисплея, а не карты.
Повторюсь, не стоит привязываться к пикселям. Координаты в них меняются. Они могут меняться при добавлении пользовательских карт к основной, при создании объектов на карте, и в ряде других случаев. Пересчитывать размеры каждый раз при добавлении нового объекта на карту - это трата времени. Проще не хранить пиксели и не привязываться к ним. В момент когда нужны координаты в пикселях их всегда можно получить, использовать и забыть снова. ИМХО.
Я понимаю почему Вы используете пиксели) я тоже использовал их для хранения верхнего левого угла карты внутри элемента управления. Потом перешел на plane. Мышка дает вам пиксели, конечно, но пиксели относительно элемента управления или дисплея, а не карты.
Повторюсь, не стоит привязываться к пикселям. Координаты в них меняются. Они могут меняться при добавлении пользовательских карт к основной, при создании объектов на карте, и в ряде других случаев. Пересчитывать размеры каждый раз при добавлении нового объекта на карту - это трата времени. Проще не хранить пиксели и не привязываться к ним. В момент когда нужны координаты в пикселях их всегда можно получить, использовать и забыть снова. ИМХО.
С уважением, Матвеев П.В.
В общем подытожим: 1. Я считаю это багом, что при вызове mapOpenSiteForMapEx/mapCloseSiteForMap не происходит перерасчёта границ в пикселях. 2. Если это не баг, тогда тему можно закрыть, удалить и забыть.
Вам нужно вручную сохранять координаты в метрах перед любыми изменениями состава карт и восстанавливать их после. Реализацию можно посмотреть в исходных текстах графических компонентов ГИС Конструктор последней версии (qdmwina.cpp, /usr/share/gisdesigner/examples/sources), на примере функций SetMapLeftTopPlane и GetMapLeftTopPlane.