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

Масштабирование карты по размеру объекта

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Масштабирование карты по размеру объекта, Масштабирование карты по размеру объекта
 
Здравствуйте! Подскажите пожалуйста, как установить масштаб карты по размерам объекта (Hobj).
Карта открыта в QDMapView. Необходимо чтобы видимая область карты ограничивалась размерами объекта (карта должна масштабироваться и центрироваться на объекте).
Изменено: Ольга Горчакова - 13.06.2017 16:26:57
 
Здравствуйте!

Пример расчета масштаба отображения карты исходя из габаритов объекта:  
Код
  int widgetHeight = ui.DMapView1->height();
  int widgetWidth = ui.DMapView1->width();

  HMAP mapHandle = ui.DMapView1->GetMapHandle();
  // objectHandle - идентификатор объекта (HOBJ)
  DFRAME objectFrame;
  mapObjectFrame(objectHandle, &objectFrame);

  DOUBLEPOINT centerPoint;
  centerPoint.x = (objectFrame.X1 + objectFrame.X2)/2;
  centerPoint.y = (objectFrame.Y1 + objectFrame.Y2)/2;

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

  double scaleDividerByHeight = (fabs(objectFrame.X1 - objectFrame.X2))/widgetWidth;
  double scaleDividerByWidth = (fabs(objectFrame.Y1 - objectFrame.Y2))/widgetHeight;
  double scaleDivider = min(scaleDividerByHeight, scaleDividerByWidth);

  double currentScale = mapGetRealShowScale(mapHandle);
  double newScale = currentScale * scaleDivider;
  mapSetRealShowScale(mapHandle, newScale);
  ui.DMapView1->UpdatePictureBorder();

  mapPlaneToPicture(mapHandle, &centerPoint.x, &centerPoint.y);
  ui.DMapView1->SetMapLeftTop(centerPoint.x - widgetWidth/2, centerPoint.y - widgetHeight/2);
 
Приветствую!

Для указанной цели mapObjectViewFrameEx предпочтительнее чем mapObjectFrame.
Он учитывает не только метрику при расчете "рамки".
Правда 100% результата ни mapObjectFrame ни mapObjectViewFrameEx не дает. Например, для векторного знака у которого точки метрики достаточно далеки друг от друга, рамка будет значительно больше чем само изображение знака, на котором хотелось бы спозиционироваться.

С уважением,
Матвеев П.В.
 
Спасибо большое за помощь!!!
Страницы: 1
Читают тему (гостей: 1)



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

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