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

Убрать полосы прокрутки и отобразить карту целиком

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

Подскажите пожалуйста как можно убрать полосы прокрутки при отображении карты и отобразить ее целиком в не большом окне.
 
Здравствуйте!

Для рассмотрения вашего вопроса уточните, пожалуйста, используются ли визуальные компоненты ГИС Конструктор для отображения карты?
 
Использую для отображения карты QDmapView

Использую ГИС  Конструктор для Qt Designer x64 (версия 12.4.0, Qt 4, Qt 5, платформа  x64, ОС "Astra Linux Special Edition", релиз "Смоленск")
Изменено: Анастасия - 09.11.2018 13:35:22
 
Здравствуйте!

Для скрытия полос прокрутки можно воспользоваться следующим способом:
Код
   // ui.DMapView1 - имя объекта класса QDmapView
   ui.DMapView1->HScrollBar->hide();
   ui.DMapView1->VScrollBar->hide();
Отображение всей карты в окне можно реализовать, например, следующим образом:
Код
      // Запросить размеры карты
      long int mapWidth = 0;
      long int mapHeight = 0;
      mapGetPictureSize(ui.DMapView1->GetMapHandle(), &mapWidth, &mapHeight);

      // Вычислить отношение размеров карты к размерам экрана
      double heightRatio = (double)mapHeight/(double)ui.DMapView1->height();
      double widthRatio = (double)mapWidth/(double)ui.DMapView1->width();

      // Выбрать наибольший коэффициент
      double scaleMultiplier = widthRatio;
      if (heightRatio > widthRatio)
        scaleMultiplier = heightRatio;

      // Установить новое значение масштаба
      ui.DMapView1->SetViewScale(ui.DMapView1->GetViewScale()*scaleMultiplier);
      // Перерисовать карту
      ui.DMapView1->Repaint();
Так же сообщаю что в следующей версии продукта планируется добавление функции отображения всей карты в окне в библиотеку компонентов.

Спасибо за ожидание.
Изменено: Константин Ганюшин - 12.11.2018 15:48:32
 
Спасибо за развернутый ответ!
 
Работаю в настоящий момент с картой Ногинска

При установке масштаба более 1:1000000 карта просто исчезает.
В таком случае встает вопрос, как реализовать задуманную задачу?

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

Попытка использования  метода MoveMap не увенчалась успехом. Не ясно в каких величинах задавать точку?

  //  Переместить карту в заданную точку
   int   MoveMap(long int wparam, long int lparam);

Попыталась в этот метод передавать значения в пикселях и в метрах на  местности и оба раза попытки использования данного метода приводили к  краху проекта.
Этот метод возращает int, как я понимаю, как обычно 0 - при ошибке. Но вместо нуля я вижу следующее - Программа неожиданно завершилась.


Ранее заданный вопрос к сожалению пока тоже не решен, так как я подозреваю, что у каждой карты минимально допустимый масштаб разный. Как-то не правильно, что карта просто исчезает, если установить масштаб 1000001, хотя при масштабе 1000000 она отображается
Изменено: Анастасия - 16.11.2018 10:36:02
 
Приветствую!

На карте Ногинска нет объектов которые видны на масштабах меньше 1:1 000 000
Границы видимости объектов определяются классификатором карты и параметрами самого объекта.

Надо понимать, что масштабирование карты это не то же, что масштабирование картинки. Какие-то объекты появляются, какие-то исчезают, карты разрабатываются для определенных масштабов.


ЗЫ: про MoveMap и прочего сказать не могу (не использую Qt), но исходники вроде есть в составе ГИС Конструктор, в конечном итоге все уходит в mapapi, а там подробная документация.

С уважением,
Матвеев П.В.
 
Вы не подскажите где именно можно ознакомиться с справкой по данному методу?
Изменено: Анастасия - 16.11.2018 11:32:22
 
Код
// -----------------------------------------------------------------------------
//  Переместить карту в заданную точку
// -----------------------------------------------------------------------------
int QDMapViewWindow::MoveMap(long int wparam, long int lparam)
{
  POINT PicturePoint;
  RECT rect = {0, 0};
  POINT * point = (POINT *)lparam;

  if (point == 0)
  {
    return 0;
  }

  MessageHandler(0, MT_MAPWINPORT, MWP_GETCLIENTRECT, (long int)&rect, 0);

  PicturePoint.X = point->x - (rect.RT + rect.LT)/2;
  PicturePoint.Y = point->y - (rect.DN + rect.UP)/2;

  SetPicturePoint(PicturePoint);

  return WM_MOVEDOC;
}


В самом конце вызывается





Код
    case MWP_SETPICTUREPOINT :

      // Установить координаты верхнего левого окна карты
      // Если окно только создано
      if (param == 0) return 0;
      point = (POINT *) param;
      if (point->x < 0)    x = 0;
      else                 x = point->x;
      if (point->y < 0)    y = 0;
      else                 y = point->y;
      HScrollBar->setValue(x);
      VScrollBar->setValue(y);

      // нужно ли перемещать карту?
      break;

указатели на скроллбары разыменовываются без проверки (уже плохо)
а вы с ними как раз что-то делали (скрывали вроде, да ?). Возможно из-за этого и вылетает.
Изменено: Владимир Егоров - 16.11.2018 11:47:46
 
Здравствуйте!

Масштаб отображения объектов задается в классификаторе карты и параметрами самого объекта. Одним из способов реализации Вашей задачи будет скопировать Вашу карту во временный пользовательский слой и выполнить подмену классификатора на созданный Вами. В созданном классификаторе Вы сможете указать требуемый масштаб для всех или только требуемых объектов.

В последней версии ГИС Конструктор(12.5.0) был добавлен еще один метод установки позиции карты SetMapLeftTopPlane. Для использования метода требуется передача координат текущего левого верхнего угла карты в метрах.
Также добавлен метод SetScaleAllMapInWindow для масштабирования карты под размер окна.
Реализацию данных методов можно посмотреть в исходных текстах графических компонентов ГИС Конструктор последней версии (qdmwina.cpp, /usr/share/gisdesigner/examples/Sources).
Страницы: 1
Читают тему (гостей: 1)



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

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