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

Программное нанесение на карту разгранлиний

Поиск  Пользователи  Правила  Войти
Форум » Linux » Особенности работы ГИС Конструктор SE версии 12.5.2 (сертифицированная версия)
Страницы: 1
RSS
Программное нанесение на карту разгранлиний
 
Здравствуйте.

Подскажите пожалуйста, как при создании объектов карты типа "разгранлинии" указывать для отдельных точек - включаются они или исключаются? От этого зависит, с какой стороны будет рисоваться дуга вокруг точки. В какой-то теме давали подсказку, как это сделать в редакторе карты (ГИС Оператор), а как задать программно?
Спасибо.
 
Здравствуйте!

Программно исключение определяется наличием подобъекта. Достаточно в исключаемой точке создать подобъект и добавлять в него следующие точки.
Описание работы с подобъектами приводится в пунктах 3.8.15 и 3.8.16 Руководства программиста https://gistoolkit.com/download/doc/gisdesigner_prog.pdf.
Функции работы с объектами и подобъектами приводятся в mapapi.h

 
А в объекте и подобъектах сквозная нумерация точек, что ли?

Давайте рассмотрим пример. Вот мне надо нанести разгранлинию, в ней некоторое количество точек, среди них есть включаемые и исключаемые, расположены они вперемешку. Я Ваше объяснение понял так, что сначала я создаю объект с нужным кодом и характером локализации, и один подобъект. Затем начинаю последовательно добавлять точки метрики. При этом если точка включаемая, я её добавляю в сам объект, т.е. в параметре subject передаю 0, а если исключаемая, то 1 (очередную точку добавляю в подобъект). А уж дальше ваша библиотека сама разберётся при отрисовке, принадлежит очередная точка метрики объекту или подобъекту, и нарисует дугу в нужную сторону. Правильно я понял?
Изменено: Сергей Гамов - 05.04.2022 21:24:14
 
Привожу небольшой пример кода нанесения линии с карты Ногинск на созданную карту с исключаемыми объектами.
В данном примере, точки 1-2 заносятся в объект, в 1-й подобъект заносят точки 2-3-4, во 2-ой 4-5.
В итоге получается линия, состоящая из нескольких отрезков-подобъектов, с исключением 2-ой и 4-ой точек.
Код
  HMAP mapHandle = ui.DMapView1->GetMapHandle();
  HSITE siteHandle = mapGetSiteIdent(mapHandle, 1);

  HOBJ createdObjectHandle = mapCreateSiteObject(mapHandle, siteHandle);
  mapRegisterObject(createdObjectHandle, 725023210, LOCAL_LINE);

  HOBJ objectHandleToCopyPoints = mapCreateObject(mapHandle);
  mapReadObjectByKey(mapHandle, mapHandle, objectHandleToCopyPoints, 1, 83195);

  long currentSubject = 0;
  for (int currentPoint = 1; currentPoint <= mapPointCount(objectHandleToCopyPoints, 0); currentPoint++)
  {
    DOUBLEPOINT objectPoint;
    mapGetPlanePoint(objectHandleToCopyPoints, &objectPoint, currentPoint, 0);
    mapAppendPointPlane(createdObjectHandle, objectPoint.x, objectPoint.y, currentSubject);

    if (currentPoint%2 == 0)
    {
      currentSubject = mapCreateSubject(createdObjectHandle);
      mapAppendPointPlane(createdObjectHandle, objectPoint.x, objectPoint.y, currentSubject);
    }
  }
  mapCommitObject(createdObjectHandle);

  mapFreeObject(objectHandleToCopyPoints);
  mapDeleteObject(objectHandleToCopyPoints);

  mapFreeObject(createdObjectHandle);
  mapDeleteObject(createdObjectHandle);
 
Контур отображается в порядке следования точек.
Сначала все точки объекта (нулевой подобъект), затем точки первого подобъекта, затем точки второго подобъекта...
Это справедливо для любого объекта.

Для разграничительных линий в каждой точке рисуется полуокружность слева по ходу линии.
Если подобъектов нет, то все точки имеют левую полуокружность.
Если за последней точкой подобъекта есть следующий подобъект ("разрыв" линии, хотя координаты первой точки следующего подобъекта должны совпадать с последней точкой предыдущего),
то полуокружность отображается как правая.

Пример есть на тестовой карте в составе ГИС Оператор -
...\Operator13\data\RedExample\battalion red\BattalionRed.sitx

В данном случае нулевой подобъект имеет 1 точку (сразу разрыв - правая полуокружность), затем первый подобъект из 3 точек (на второй точке левая полуокружность),
затем третий подобъект из 1 точки (разрыв - правая полуокружность). Линия на рисунке идет справа налево.


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



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

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