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

Габариты области отображения карты

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Габариты области отображения карты
 
Существуют ли функции для определения точек координат в углах области отображения карты, по аналогии с

Код
QDMapView::GetMapLeftTop()
или хотя бы координаты правого нижнего угла?


Способ с получением ширины/высоты области отображения в пикселях с последующим пересчетом в метры не подходит.
 
А чем он не подходит?
 
У нас map-файл открывается в двух экземплярах класса QDMapView, основном и дополнительном. Нужно найти координаты области отображения дополнительного. При попытке посчитать правый нижний угол дополнительного QDMapView функция mapPictureToPlane() возвращает неправильные значения, очень похоже, что она вычисляет координаты по отношению к точке (0,0) основного экземпляра QDMapView, хотя ей передается HMAP дополнительного. Поэтому не подходит.
Есть другие способы?
 
Пересчет в любом случае выполняет функция mapPictureToPlane.

Нужно передавать ей корректные координаты в пикселах в общей картинке.Других методов нет.
 
Oleg Belenkov, хорошо, давайте разбираться, почему не работает.

Как я уже упомянул, специфика в том, что у нас один и тот же map-файл открывается в двух экземплярах класса QDMapView, сначала открывается в "основном", затем в "дополнительном" QDMapView. Нужно получить размер области отображения в прямоугольных координатах "дополнительного".

Чтобы проиллюстрировать проблему, сделал слот slotMouseButtonPress(int,int,int), подключается к сигналу SignalMousePress(int,int,int) "дополнительного" QDMapView.
Код
void Map::slotMouseButtonPress(int x, int y)
{
        qDebug() << "Pixel: cursor: " << x << ", " << y;
        double dx = x;
        double dy = y;
        mapPictureToPlane( dmap->GetMapHandle(), &dx, &dy );
        qDebug() << "Plane: cursor: " << QString("%1").arg(dx, 0, 'f') << QString(" %1").arg(dy, 0, 'f');
}
В слоте вывожу координаты клика в пикселях ("Pixel: cursor:") и после преобразования mapPictureToPlane() ("Plane: cursor:"), как я предполагаю, прямоугольные координаты клика.

Кликнул в "дополнительном" QDMapView максимально близко к левому верхнему углу области отображения карты, как показано на картинке.
При этом в консоли получаю такой вывод:
Код
Pixel: cursor:  3 ,  1 
Plane: cursor:  "5365153.010286" " 6224101.773985" 

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



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

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