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

Найти уклоны на маршруте

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Найти уклоны на маршруте
 
Необходимо решить следующую задачу:
Есть проложенный маршрут по графу дорог. Необходимо на этом маршруте найти все уклоны дороги, которые превышают заданный градус.
Понятно, что без матрицы высот не обойтись.
Какие функции MAPAPI следует применять?
 
Есть специализированные задачи для подготовки матриц склонов -
https://help.gisserver.ru/v15/russian/surface/index.html?idn_mtq_slope.html

и матрицы уклонов и карты векторов уклонов -
https://help.gisserver.ru/v15/russian/incline/index.html

Эти данные позволяют оценить пересеченность местности и крутизну склонов.

По ним быстро можно найти возможные проблемные места.

Само вычисление угла уклона по элементам матрицы достаточно простое - по теореме синусов. По памяти - arctg(dh \ dL), dh - превышение высоты, dL - расстояние между точками на плоскости.

Но дорога не идет просто по рельефу. Есть насыпи, есть выемки.
Поэтому нужна детальная съемка с беспилотника. Затем построение 3D-модели в Панорама-Фото -
https://gisinfo.ru/products/panphoto.htm

А вот по полученной детальной матрице можно получить точную матрицу склонов/уклонов и точную оценку уклонов дороги.
 
Комплекс 3D-анализа в стандартную поставку Панорамы не входит?
 
Цитата
Валерий Парусов написал:
Комплекс 3D-анализа в стандартную поставку Панорамы не входит
Комплекс 3D-анализа является дополнительным модулем. В программу ГИС Панорама не входит.

В программу ГИС Панорама под Windows входит модуль Расчеты по карте, в данном модуле есть режимы по работе с матрицей.
 
Сделал так.
1) берем дугу графа дорог, у нее N точек метрики
2) перебираем отрезки между точками метрики [i; i+1], i=1..N-1
3) для каждой i-й точки вызываем mapGetHeightValueOfMtrEx (возвращает интерполированную высоту в заданной точке)
4) если длина отрезка больше заданной величины, берем еще и высоту промежуточных точек
Ну, вроде все верно выходит, в результате получается 3D линия, дальше уже дело техники.

Вот только есть еще функции:
mtrCalcAbsoluteHeight, mtrCalcAbsoluteHeightBySectors - Вычисление значения абсолютной высоты (point->H) в заданной точке

какие функции лучше использовать?
 
Как указано в комментариях, функции типа mtrCalcAbsoluteHeight и mtrCalcAbsoluteHeightBySectors применяются, когда в составе документа нет открытых матриц высот или
моделей местности (MTD, TIN, MTL и так далее), выполняется интерполяция по точкам рельефа местности в виде горизонталей, отметок высот и глубин (если они есть):
Код
// Вычисление значения абсолютной высоты (point->H) в заданной
 // точке (point->X, point->Y) по данным векторной карты
 // Координаты точки задаются в метрах в системе координат документа
 // При ошибке возвращает ноль

_MTREXIMP long int _MTREXAPI mtrCalcAbsoluteHeight(HMAP hMap, XYHDOUBLE* point);

 // Вычисление значения абсолютной высоты в заданной точке (point->X,point->Y) по данным векторной карты
 // Координаты точки задаются в метрах в системе координат документа
 // sectorcount - количество направлений для поиска окружающих высот
 //  (должно быть кратно 4, минимальное количество направлений = 4,
 //   максимальное = 256)
 // Возвращает значение высоты в метрах
 // В случае ошибки при вычислении высоты возвращает ERRORHEIGHT

_MTREXIMP double _MTREXAPI mtrCalcAbsoluteHeightBySectors(HMAP hMap, const DOUBLEPOINT* point, long int sectorcount);

Если матрицы или модели местности есть, то используются другие функции:
Код
  // Вычисление абсолютной высоты в заданной точке по открытым данным,
  // содержащим модели рельефа: матрица высот MTW, матрица слоев MTL,
  // облако точек MTD, триангуляционная нерегулярная сеть TIN.
  // hMap - идентификатор открытой основной векторной карты
  // x,y  - координаты точки, задаются в метрах в системе координат
  //        векторной карты
  // parm - параметры вычисления высоты (структура CALC_ABSOLUTE_HEIGHT)
  //   Последовательность использования моделей рельефа: MTW, MTL, MTD, TIN.
  //   Переход к использованию очередной модели рельефа выполняется
  //   в случае ошибки при вычислении высоты и в случае необеспеченности
  //   заданной точки данными модели. Использование модели рельефа
  //   можно отключить, задавая в структуре CALC_ABSOLUTE_HEIGHT
  //   метод вычисления высоты = -1.
  //   Если parm == 0, то считается, что задана структура
  //   CALC_ABSOLUTE_HEIGHT, содержащая элементы равные 0.
  // hPaint - идентификатор контекста отображения для многопоточного вызова функций,
  //          создается функцией mapCreatePaintControl, освобождается - mapFreePaintControl
  // Возвращает значение высоты в метрах.
  // В случае ошибки при выборе высоты и в случае необеспеченности
  // заданной точки данными моделей рельефа возвращает ERRORHEIGHT

_MAPIMP double _MAPAPI mapGetAbsoluteHeight(HMAP hMap, double x, double y, const CALC_ABSOLUTE_HEIGHT* parm, HPAINT hPaint);

  // Выбор значения абсолютной высоты в заданной точке из
  // матрицы с наименьшим размером элемента (более точной)
  // hMap   - идентификатор открытой основной векторной карты
  // Координаты точки (x,y) задаются в метрах в системе координат
  // векторной карты. Возвращает значение высоты в метрах.
  // hPaint - идентификатор контекста отображения для многопоточного вызова функций,
  //          создается функцией mapCreatePaintControl, освобождается - mapFreePaintControl
  // В случае ошибки при выборе высоты и в случае необеспеченности
  // заданной точки матричными данными возвращает ERRORHEIGHT

_MAPIMP double _MAPAPI mapGetPrecisionHeightValue(HMAP hMap, double x, double y);
_MAPIMP double _MAPAPI mapGetPrecisionHeightValueEx(HMAP hMap, double x, double y, HPAINT hPaint);


  // Расчет абсолютной высоты методом треугольников в заданной точке
  // по матрице с наименьшим размером элемента (более точной).
  // В матрицах обрабатываются нормальные высоты
  // Высота вычисляется по самой точной матрице высот,а в случае
  // необеспеченности заданной точки данными матриц высот -
  // по самой точной матрице слоев.
  // hMap   - идентификатор открытой основной векторной карты
  // Координаты точки (x,y) задаются в метрах в системе координат
  // векторной карты. Возвращает значение высоты в метрах.
  // hPaint - идентификатор контекста отображения для многопоточного вызова функций,
  //          создается функцией mapCreatePaintControl, освобождается - mapFreePaintControl
  // В случае ошибки при выборе высоты и в случае необеспеченности
  // заданной точки матричными данными возвращает ERRORHEIGHT (-111111)

_MAPIMP double _MAPAPI mapGetPrecisionHeightTriangle(HMAP hMap, double x, double y);
_MAPIMP double _MAPAPI mapGetPrecisionHeightTriangleEx(HMAP hMap, double x, double y, HPAINT hPaint);

  // Расчет абсолютной высоты методом треугольников в заданной точке
  // по матрице с номером number в цепочке
  // Координаты точки (x,y) задаются в метрах в системе координат
  // векторной карты. Возвращает значение высоты в метрах.
  // hMap -  идентификатор открытых данных
  // number - номер матрицы в списке открытых матриц
  // В случае ошибки при выборе высоты и в случае необеспеченности
  // заданной точки матричными данными возвращает ERRORHEIGHT

_MAPIMP double _MAPAPI mapGetHeightTriangleOfMtr(HMAP hMap, long int number, double x, double y);

  // Расчет среднего значения абсолютной высоты по высотам квадратной области
  // Функция может использоваться для создания матрицы обобщенного рельефа
  // xcenter, ycenter - координаты центра области в метрах
  // size - размер стороны области в метрах (размер элемента матрицы обобщенного рельефа)
  // Возвращает среднее значение высоты в метрах
  // В случае ошибки при выборе высот и в случае необеспеченности
  // заданной области матричными данными возвращает ERRORHEIGHT

_MAPIMP double _MAPAPI mapGetGeneralHeight(HMAP hMap, double xcenter, double ycenter, double size);

  // Расчет среднего значения абсолютной высоты по высотам квадратной области
  // матрицы с номером number в цепочке
  // Функция может использоваться для создания матрицы обобщенного рельефа
  // xcenter, ycenter - координаты центра области в метрах
  // size - размер стороны области в метрах (размер элемента матрицы обобщенного рельефа)
  // hMap -  идентификатор открытых данных
  // number - номер матрицы в списке открытых матриц
  // Возвращает среднее значение высоты в метрах
  // В случае ошибки при выборе высот и в случае необеспеченности
  // заданной области матричными данными возвращает ERRORHEIGHT

_MAPIMP double _MAPAPI mapGetGeneralHeightOfMtr(HMAP hMap, long int number, double xcenter, double ycenter, double size);

Для получения высоты в произвольной точке наиболее часто используется функция mapGetPrecisionHeightTriangle (в потоках - mapGetPrecisionHeightTriangleEx).
Она аналогична mapGetHeightValueOfMtrEx с типом интерполяции 2 - интерполяция по ближайшим 3 элементам, но ищет матрицу с наименьшим элементом в точке.
Страницы: 1
Читают тему (гостей: 1)



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

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