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

Вставка UI приложения ГИС в виджет вместе с компонентом QDMapView

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Вставка UI приложения ГИС в виджет вместе с компонентом QDMapView, Существует ли возможность вставить UI приложения ГИС (тулбар, функциональность выделения областей, функциональность изменения расстояний и т.д. как это есть в программе Panorama mini) в виджет разрабатываемой программы.
 
Уважаемые коллеги! Я скачал и установил ГИС Конструктор для Qt Designer. Запустил пример "myfirst". Изучил руководство программиста "ГИС КОНСТРУКТОР ДЛЯ QT DESIGNER". Успешно вставил компонент QDMapView в виджет своей программы.
Всё работает, но у меня остался вопрос.
Существует ли возможность вставить UI приложения ГИС (тулбар, функциональность выделения областей, функциональность изменения расстояний и т.д. как это есть в программе Панорама Мини) в виджет разрабатываемой программы. Или мне будет нужно самостоятельно программировать выделение областей, отслеживать нажатия кнопки мышки для определения точек, между которыми вычисляется расстояние и т.д.
Иными словами, в рамках виджета мне нужно реализовать интерфейс, похожий на Панорама Мини . Могу ли я использовать готовый UI Панорамы или мне нужно программировать UI самостоятельно?
Спасибо.
 
Тема перенесена в раздел, посвященный разработке ГИС приложений (GIS ToolKit)
 
Здравствуйте!

Для интерактивного взаимодействия с картой можно использовать интерфейс класса QDGtkAction (qdmact.h).
Для реализации собственного поведения можно выполнить наследование этого класса и переопределить обработчики событий (например, нажатие кнопки или клавиши мыши).
Также в составе ГИС Конструктор существует некоторый набор уже реализованных обработчиков (QDGetMapPoint, QDMapActionLine, QDMapSelectRect).
Пример использования обработчика можно посмотреть в примере myfirst из инсталляции.

Тулбар реализуется отдельно средствами Qt.
 
Спасибо!
 
Попробовал включить в проект класс QDGtkAction, но споткнулся о проблему undefined reference to `QDGtkAction::QDGtkAction(QWidget*, char const*)'

Среда разработки Qt Creator 3.5.1
1) Взял простой пример "mapview" из поставки "ГИС Конструктор для Qt Designer". Убедился, что пример работает.
2) В заголовочный файл "mainform1.h" вставил ссылку на заголовок #include "qdmact.h", содержащий описание класса QDGtkAction и добавил переменную QDGtkAction qDGtkAction;

То есть, все мои изменения, внесенные в работающий пример "mapview" состоят в добавлении 2 строк в файл "mainform1.h":

#include "qdmact.h"
...
QDGtkAction qDGtkAction;

На этапе линковки получаю ошибку:

D:\PanoramaWin\unpack\gisdesigner_win\examples\mapview\mainfor­m1.cpp:43: ошибка: undefined reference to `QDGtkAction::QDGtkAction(QWidget*, char const*)'

Ничего другого в проекте не менял, компонент просмотра карты работает, библиотека скачана в составе "ГИС Конструктор для Qt Designer" пару недель назад, ссылка на библиотеку в pro файле присутствует

win32:LIBS += \
   -L$$PWD/. ./. ./lib -lmapcomponents -lGisuacces

Провел аналогичные эксперименты в других панорамовских проектах. Результат тот же.

Коллеги, прошу дать идею, почему undefined reference на компонент QDGtkAction?
 
Здравствуйте!

Прошу прощения - предыдущий ответ составлял, основываясь на том, что Вы используете ГИС Конструктор для Linux.
В ГИС Конструктор для Windows адаптирован ограниченный набор классов, перечисленный в документации (http://gistoolkit.ru/download/doc/gisdesigner_win_prog.pdf).

QDGtkAction не адаптировался, но присутствует в проекте в исходных текстах.
Вы можете взять его за основу при разработке обработчика. В этом случае понадобится его доработка.
В частности, проблема с undefined reference связана с тем, что QDGtkAction не экспортируется из библиотеки.
Для решения этой проблемы необходимо добавить его как экспортируемый виджет по аналогии с QDMapView.
 
ОК, понятно.
 
Добрый день.
Продолжаю осваивать Панораму и наткнулся на следующую проблему.
Собрал пример "mapview" под ASTRA LINUX 1.5 (Qt Creator 3.5.1). Пример запустился, карта Ногинска открывается.
Для проверки преобразования географических координат в экранные добавил на форму кнопку со следующим обработчиком:

mp = new QDMapPoint(ui.DMapView1); // Открыл карту Ногинска, создаю точку на карте
   double x = mp->GetPlaceIn();// Проверка PlaceIn. Здесь x равен 2
   double y = mp->GetPlaceOut();// Проверка PlaceOut. Здесь y равен 3
   mp->SetPlaceIn(4);         //Установить PlaceIn = 4
   mp->SetPlaceOut(2);      //Установить PlaceOut = 2
   x = mp->GetPlaceIn();    //Проверка PlaceIn. Здесь x равен 2  (SetPlaceIn не сработал)
   y = mp->GetPlaceOut(); //Проверка PlaceOut. Здесь y равен 3 (SetPlaceOut не сработал)
   // Координаты Ногинска
   double x1 = 55.854522;
   double y1 = 38.441831;
   double x2 = 0;
   double y2 = 0;
   bool res ;
   res=  mp->SetPoint(x1,y1);//Установить координаты Ногинска. res == false
   res=  mp->GetPoint(&x2,&y2);//Запросить экранные координаты Ногинска. res == false

То есть не сработали функции SetPlaceIn и SetPlaceOut. Проверял с другими параметрами, не только 4 и 2.  
Преобразование географических координат в экранные не удалось.
Пожалуйста дайте идею, что здесь не так.

P.S. Подошел к проблеме с другого конца, и программа задышала.
Использовал функции
mapGeoToPlane
mapPlaneToPicture
GetMapLeftTop
Изменено: Вадим - 18.01.2019 14:41:12 (Нашел решение проблемы)
 
Здравствуйте!

Функция QDMapPointAcces::SetPlaceIn() перед установкой типа координат производит ряд проверок.
В частности, на наличие открытой карты и поддержку геодезических координат:
Код
void QDMapPointAcces::SetPlaceIn(int value)
{
  if (VarMapView == NULL) return;
  if (VarMapView->GetMapHandle() == 0) return;
  if ((value == PP_GEO) && (mapIsGeoSupported(VarMapView->GetMapHandle()) == 0)) return;

  VarPlaceIn = value;
}
В следующей версии ГИС Конструктор мы добавим код возврата в эту функцию для проверки на корректность.
Страницы: 1
Читают тему (гостей: 1)



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

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