У нас map-файл открывается в двух экземплярах класса QDMapView, основном и дополнительном. Нужно найти координаты области отображения дополнительного. При попытке посчитать правый нижний угол дополнительного QDMapView функция mapPictureToPlane() возвращает неправильные значения, очень похоже, что она вычисляет координаты по отношению к точке (0,0) основного экземпляра QDMapView, хотя ей передается HMAP дополнительного. Поэтому не подходит. Есть другие способы?
Oleg Belenkov, хорошо, давайте разбираться, почему не работает.
Как я уже упомянул, специфика в том, что у нас один и тот же map-файл открывается в двух экземплярах класса QDMapView, сначала открывается в "основном", затем в "дополнительном" QDMapView. Нужно получить размер области отображения в прямоугольных координатах "дополнительного".
Чтобы проиллюстрировать проблему, сделал слот slotMouseButtonPress(int,int,int), подключается к сигналу SignalMousePress(int,int,int) "дополнительного" QDMapView.
В слоте вывожу координаты клика в пикселях ("Pixel: cursor:") и после преобразования mapPictureToPlane() ("Plane: cursor:"), как я предполагаю, прямоугольные координаты клика.
Кликнул в "дополнительном" QDMapView максимально близко к левому верхнему углу области отображения карты, как показано на картинке. При этом в консоли получаю такой вывод:
При этом на "основном" QDMapView показывает правильное положение Одессы - примерно 5155222 6322842. Расхождение значительное. Также интересно, что координаты из вывода
Код
Plane: cursor: "5365153.010286" " 6224101.773985"
не что иное, как координаты верхнего левого угла открытого map-файла.
Пересчет в любом случае выполняет функция mapPictureToPlane. Нужно передавать ей корректные координаты в пикселах в общей картинке, а не в пикселах в окне. Нужно прибавить координаты от мышки к координатам верхнего левого угла окна в изображении карты, а затем переводить в метры.