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

Открытие определенного района на карте?

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

Подскажите пожалуйста предусмотрена ли возможность открывать и отображать не всю карту целиком, а определенный ее фрагмент, который задавать по прямоугольным координатам?

Использую ОС Astra Linux, карта Мира.
Использую ГИС    Конструктор для Qt Designer x64 (версия 12.3.1, Qt 4, Qt 5, платформа    x64, ОС "Astra Linux Special Edition", релиз "Смоленск") от 10.05.2018


Для отображения карты использую компонент QDMapView
Код
    QDMapView *mv;

    mv->SetMapFileName(mapName);
    mv->SetMapActive(true);
    mv->SetMapVisible(true);
    mv->HScrollBar->hide();
    mv->VScrollBar->hide();
    mv->SetViewScale(mv->GetMapScale());
    int x=0, y=0;
    mv->GetMapLeftTop(&x,&y);
    HMAPcurrentHmap = mv->GetMapHandle();
 
Здравствуйте!

Привожу пример кода для вывода фрагмента карты для вывода определённого фрагмента карты по прямоугольным координатам:

Код
  HMAP mapHandle = ui.DMapView1->GetMapHandle();
  if (mapHandle)
  {
    ui.DMapView1->resize(1000, 800);

    // Фрагмент карты Ногинска для отображения
    DFRAME zoneFrame;
    zoneFrame.X1=6195200.0;
    zoneFrame.Y1=7457500.0;
    zoneFrame.X2=6185600.0;
    zoneFrame.Y2=7470000.0;

    // Предполагаемый центр зоны
    DOUBLEPOINT centerPoint;
    centerPoint.X= (zoneFrame.X1 + zoneFrame.X2) / 2;
    centerPoint.Y= (zoneFrame.Y1 + zoneFrame.Y2) / 2;

    mapPlaneToPicture(mapHandle, &zoneFrame.X1, &zoneFrame.Y1);
    mapPlaneToPicture(mapHandle, &zoneFrame.X2, &zoneFrame.Y2);

    // Расчет коэффициента масштаба
    double scaleDividerByHeight = (fabs (zoneFrame.X1 - zoneFrame.X2)) / ui.DMapView1->width();
    double scaleDividerByWidth = (fabs (zoneFrame.Y1 - zoneFrame.Y2)) / ui.DMapView1->height();
    double scaleDivider = min(scaleDividerByHeight, scaleDividerByWidth);
    double newScale = mapGetRealShowScale(mapHandle) * scaleDivider;
    mapSetRealShowScale(mapHandle, newScale);
    ui.DMapView1->UpdatePictureBorder();

    // Установить центр
    mapPlaneToPicture(mapHandle, ¢erPoint.X, ¢erPoint.Y);
    ui.DMapView1->SetMapLeftTop(centerPoint.X - ui.DMapView1->width() / 2, centerPoint.Y - ui.DMapView1->height() / 2);
  }
 
Цитата
Анастасия написал:
Добрый день!

Подскажите пожалуйста предусмотрена ли возможность открывать и отображать не всю карту целиком, а определенный ее фрагмент, который задавать по прямоугольным координатам?

Использую ОС Astra Linux, карта Мира.
Использую ГИС    Конструктор для Qt Designer x64 (версия 12.3.1, Qt 4, Qt 5, платформа    x64, ОС "Astra Linux Special Edition", релиз "Смоленск") от 10.05.2018


Для отображения карты использую компонент QDMapView
Код
     QDMapView *mv;

    mv->SetMapFileName(mapName);
    mv->SetMapActive(true);
    mv->SetMapVisible(true);
    mv->HScrollBar->hide();
    mv->VScrollBar->hide();
    mv->SetViewScale(mv->GetMapScale());
    int x=0, y=0;
    mv->GetMapLeftTop(&x,&y);
    HMAPcurrentHmap = mv->GetMapHandle(); 

Добрый день! Спасибо за пример! Это практически то, что необходимо, за исключением того, необходимо, чтобы та, часть карты, что не входит в заданную область обрезалась. Сейчас она по прежнему остается доступной.
 
Здравствуйте.

На сайте доступна обновленная версия ГИС Конструктор. В данной версии расширен функционал компонента отображения электронной карты QDMapWindow.
В компоненте реализована возможность открытия фрагмента карты, ограниченного рамкой.
Для демонстрации данного функционала был обновлен пример myfirst.

Страницы: 1
Читают тему (гостей: 2)



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

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