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

Создание зоны заданной длины вокруг линейного объекта

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Создание зоны заданной длины вокруг линейного объекта
 
Как лучше построить зону вокруг части дуги графа дорог?
Т.е. берем точку на карте вблизи дуги, находим ближайшую к ней точку на дуге (это ясно как сделать).
И теперь надо построить зону вдоль дуги в обе стороны от этой точки вдоль контура на заданное расстояние и заданной ширины.
Понятно, что зона может лежать полностью на дуге, а может и выскакивать за ее границы, если длину зоны задать большой.
 
Код
  // Найти точку на контурах объекта и подобъектов, ближайшую к заданной
  // hMap    - идентификатор открытой карты
  // info    - идентификатор объекта в памяти
  // pointin - координаты точки в прямоугольной системе координат в метрах на местности
  // Возвращает номер точки метрики за которой расположена точка на контуре или ноль при ошибке
  // Координаты точки (в метрах) помещаются по адресу pointout
  // Для определения номера найденного подобъекта при поиске
  // по всей метрике применяется mapGetCurrentSubject()

_MAPIMP long int _MAPAPI mapSeekNearVirtualPoint(HMAP hMap, HOBJ info, const DOUBLEPOINT* pointin, DOUBLEPOINT* pointout);

 // Вычисление длины объекта от начала до заданной точки
 // info  - идентификатор объекта карты в памяти
 // point - координаты точки, расположенной вдоль(вблизи) объекта
 // Если точка не на объекте - ищется ближайшая точка на контуре
 // Координаты точки обновляются
 // При ошибке возвращает ноль

_MAPIMP double _MAPAPI mapLengthToPoint(HOBJ info, const DOUBLEPOINT *point);

 // Искомый участок будет находиться в диапазоне расстояний (distance) от начала контура: от (length - delta) до (length + delta)

  // Определение координат точки, лежащей на заданном расстоянии вдоль контура от заданной точки на местности
  // info   - идентификатор объекта в памяти
  // number - номер начальной точки
  // distance - расстояние
  // если distance > = 0 - поиск по направлению цифрования
  //               <   0 - поиск против направления цифрования
  // point - координаты выходной точки в прямоугольной системе в метрах на местности
  // subject - номер подобъекта
  // tail - поле для записи остатка, для которого не нашлось места на контуре объекта (задано 150, а длина - 100, в tail - 50)
  // Если поле tail не задано, то функция вернет ноль при превышении длины объекта
  // Возвращает номер точки, за которой находится или c которой совпадает найденная точка
  // Если найденная точка в точности совпадает с точкой метрики, то возвращается отрицательный номер точки
  // Если запрошенное расстояние превышает длину объекта - возвращает ноль
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSeekVirtualPointByDistanceEx(HOBJ info, long int number, double distance, DOUBLEPOINT* point,
                                                         long int subject, double* tail);


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


 // Построение зоны вокруг подобъекта
 // radius  - радиус создаваемой зоны (в метрах на местности)
 // info    - идентификатор копии объекта, по метрике которого строится зона
 //           В этот объект будет записана метрика построенной зоны
 // subject - номер подобъекта, вокруг которого строим зону или -1 (строить вокруг всех подобъектов)
 // form    - тип угла 0 - прямой, 1 - закругленный
 // arcdist - расстояние между точками по дуге (в метрах на местности), рекомендуется radius / 15
 // cornerfactor - коэффициент для расчета максимальной длины угла, рекомендуется 3
 // Если задан прямой тип угла, то внешний угол обрезается по расстоянию от узла по
 // допуску radius * cornerfactor для устранения длинных углов
 // side    - направление построения зоны (1-справа, 2-слева, 3-с обеих сторон, 4-внешняя для полигонов, 5-внутренняя для полигонов)
 // filterprec - уровень фильтрации для построенной зоны
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapZoneObjectWithFilter(double radius, HOBJ info, long int subject,
                   long int form, double arcdist, double cornerfactor, long int side, double filterprec);


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



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

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