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

Нарисовать на карте площадной объект с полупрозрачным фоном

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 3 4 След.
RSS
Нарисовать на карте площадной объект с полупрозрачным фоном
 
Добрый день!

Есть необходимость рисовать на карте объекты (сектора, многоугольники, треугольники) с полупрозрачным фоном. Как частный случай интересует интересует pie вот такой https://yandex.ru/images/search?p=1&text=pie%20%D1%81%D0%B5%D0%BA%D1%82%D0%BE%D1%80%20%D0%BA­...

Подскажите пожалуйста, как это можно реализовать, сектор должен отрисовываться от начально заданной точки с заданным углом (который определяет ширину сектора) и с углом, который определяет угол его поворота.
Изменено: Анастасия - 17.09.2018 15:21:36
 
Приветствую!

Для нанесения полупрозрачных площадных объектов можно использовать пользовательские объекты. Пример создания createPolygonObject.
С уважением,
Матвеев П.В.
 
Доброе утро!

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

1) Подскажите пожалуйста, как реализовать возможность отображать площадные объекты на карте без их сохранения после закрытия карты?
2) Как реализовать добавление таких площадных объектов на отдельный слой (уже с сохранением).

HMAP получаю при открытии базовой карты     hmap = ui->viewMap->GetMapHandle();
ui->viewMap компонент QDnapView
Код
    int w = 400;
    int h = 400;
    RECT rect;
    rect.left = 2 * (w + 10);
    rect.top = 10;
    rect.right = rect.left + w;
    rect.bottom = rect.top + h;

    int bgColor = 0x00FFFF;
    int fgColor = 0xFF << (8 * 2);

    HOBJ hobj = mapCreateObject(hmap, IDDOUBLE2, 0);
    if (hobj != 0)
    {
        if (mapRegisterDrawObject(hobj, 0, LOCAL_SQUARE) != 0)
        {
            IMGPOLYGONGLASS fill;
            memset((void*) &fill, 0, sizeof(fill));
            fill.Color = bgColor;
            fill.Transparency = 20;
            mapAppendDraw(hobj, IMG_POLYGONGLASS, (const char*) &fill);
            IMGLINE border;
            memset((void*) &border, 0, sizeof(border));
            border.Color = fgColor;
            border.Thick = PIX2MKM(2);
            mapAppendDraw(hobj, IMG_LINE, (const char*) &border);
            double x1 = rect.left;
            double y1 = rect.top;
            double x2 = rect.right;
            double y2 = rect.bottom;
            mapPictureToPlane(hmap, &x1, &y1);
            mapPictureToPlane(hmap, &x2, &y2);
            mapAppendPointPlane(hobj, x1, y1, 0);
            mapAppendPointPlane(hobj, x2, y1, 0);
            mapAppendPointPlane(hobj, x2, y2, 0);
            mapAppendPointPlane(hobj, x1, y2, 0);
            mapAppendPointPlane(hobj, x1, y1, 0);

            mapCommitObject(hobj);
            mapFreeObject(hobj);
        }
    }
Изменено: Анастасия - 18.09.2018 10:00:50
 
С 1 пунктом уже разобралась, создаю объект с указанием HSITE след. образом

Код
HOBJ hobj = mapCreateSiteObject(hmap, hsite,IDDOUBLE2, 0);  
и тогда объекты не будут сохранятся на карте

Как я поняла метод  mapCreateSiteObject создает пустой объект на пользовательской карте, а  mapCreateObject на базовой.
 
Приветствую!

Объекты сохраняются при вызове commit в любом случае. Или на основной карте, или на пользовательской.
При помощи mapCreateSiteObject можно создавать объекты и на основной карте, если hsite 0 указать (вроде).
Если нужно отобразить объекты, которые были нанесены ранее на пользовательскую карту (не на временную, естественно), то после открытия ее надо добавить к основной (mapAppendData*()).
Альтернативно, можно почитать про работу с проектами (mpt) в документации. Сохранять набор карт в виде проекта, и затем открывать. В этом случае все пользовательские карты, и прочие ресурсы добавятся автоматически.


С уважением,
Матвеев П.В.
 
Отлично, теперь разобралась! Спасибо за помощь!

А Вы не подскажите есть ли возможность нарисовать сектор круга с полупрозрачным фоном (по тому же принципу, что и площадной объект), у которого задается точка начала, угол раскрыва и угол поворота?
Изменено: Анастасия - 18.09.2018 13:50:50
 
Создать сектор круга можно при помощи функции mapCreateArc.

Пример ее использования:
Код
  HMAP mapHandle = ui.DMapView1->GetMapHandle();
  HOBJ objectHandle = mapCreateObject(mapHandle, IDDOUBLE2, 0);
  if (objectHandle != 0)
  {
      if (mapRegisterObjectByKey(objectHandle, "S1000000002") != 0)
      {
          DOUBLEPOINT center = { mapGetMapX2(mapHandle), mapGetMapY1(mapHandle) };  // левый верхний угол
          double radius = 1000.0;   // 1 km
          double leftAngle = 10.0 * M_PI / 180.0;    // + 10
          double rightAngle = -10.0 * M_PI / 180.0;  // - 10
          DOUBLEPOINT left = { 0.0, 0.0 };
          DOUBLEPOINT right = { 0.0, 0.0 };
          left.x = center.x + radius * sin(leftAngle);
          left.y = center.y + radius * cos(leftAngle);

          right.x = center.x + radius * sin(rightAngle);
          right.y = center.y + radius * cos(rightAngle);

          mapAppendPointPlane( objectHandle, center.x, center.y, 0 );

          if ( mapCreateArc(mapHandle, objectHandle, &left, &#162;er, &right, radius) != 0 )
          {
            mapAppendPointPlane( objectHandle, center.x, center.y, 0 );
            mapCommit(objectHandle);
          }
      }
      mapFreeObject(objectHandle);
  }

Обращаю внимание, что функция создает именно дугу, а не сектор, т.е. необходимо как в примере выше задать начальную и конечную точки, чтобы получился сектор.
 
Спасибо! Сейчас попробую!

Проверяя отрисовку площадного объекта натнулась на то, что объект рисуется без соблюдения кривизны земли.  Подскажите, как можно отрисовывать площадные объекты с соблюдение кривизны земли (вместо прямой должна быть дуга).
Изменено: Анастасия - 18.09.2018 14:27:42
 
Приветствую!

Объекты рисуются по точкам, которые заданы в метрике, точки соединяются прямыми. Для отрисовки с учетом кривизны, точки метрики надо заполнять соответствующим образом. В АПИ есть методы расчета точек, и метод заполнения метрики объекта точками кривой задающей кратчайшее расстояние между двумя точками: mapOrthodromeObject

С уважением,
Матвеев П.В.
 
Спасибо, а можете привести эти методы?
Страницы: 1 2 3 4 След.
Читают тему (гостей: 1)



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

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