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

Рисование кривой

Поиск  Пользователи  Правила  Войти
Форум » Linux » ГИС Панорама для Linux
Страницы: 1
RSS
Рисование кривой, Как нарисовать пространственную кривую проходящую по поверхности Земли из точки 1 в точку 2.
 
Добрый день! Задача казалось бы совсем простая есть две точки на карте и требуется провести через них минимальную по расстоянию кривую по поверхности земли. Понятно, что для плоскостного случая задача решается элементарно: mapAppendDraw() и mapAppendPointPlan() mapAppendPointPlan() и это прямая. А если расстояния между двумя точками велико, т.е одна точка в Калининграде, а другая точка например на Байкале, то прямая должна быть некой кривой.
Вопрос
1. каким набором функций можно реализовать прорисовку кривой.
2. как нарисовать кривую если дана только начальная точка, а вместо конечной точки задано расстояние и угол.
 
Цитата
Владислав Костылев написал:
Добрый день! Задача казалось бы совсем простая есть две точки на карте и требуется провести через них минимальную по расстоянию кривую по поверхности земли. Понятно, что для плоскостного случая задача решается элементарно: mapAppendDraw() и mapAppendPointPlan() mapAppendPointPlan() и это прямая. А если расстояния между двумя точками велико, т.е одна точка в Калининграде, а другая точка например на Байкале, то прямая должна быть некой кривой. Вопрос1. каким набором функций можно реализовать прорисовку кривой.2. как нарисовать кривую если дана только начальная точка, а вместо конечной точки задано расстояние и угол.






E-mail  


По моему в ГИСе проекция карт как раз такая, что бы линии были прямыми. Поэтому все прорисовывается прямыми))))
 
Кратчайшая между двумя точками на поверхности шара - ортодромия. Ее можно построить функцией mapOrthodrome или mapOrthodromeObject.
Дальше, в случае mapOrthodrome, точки добавить в объект mapAppendPoint(Plane, Geo, GeoWGS84).
Отобразить объект.

Не понятно зачем Вам mapAppendDraw? Не проще ли описать объект в классификаторе и использовать его?
 
Цитата
Сергей Гороховецкое написал:
По моему в ГИСе проекция карт как раз такая, что бы линии были прямыми. Поэтому все прорисовывается прямыми))))
Вы можете убедиться, что в любой ГИС на больших дистанциях расстояние по прямой значительно больше длины ортодромии.
Самому было очень удивительно такое открытие, но если представить землю хотя бы в виде шара - все становится понятнее :)
 
Цитата
Vladimir Letov написал:
Цитата
 Сергей Гороховецкое  написал:
По моему в ГИСе проекция карт как раз такая, что бы линии были прямыми. Поэтому все прорисовывается прямыми))))
Вы можете убедиться, что в любой ГИС на больших дистанциях расстояние по прямой значительно больше длины ортодромии.
Самому было очень удивительно такое открытие, но если представить землю хотя бы в виде шара - все становится понятнее
Это понятно, но проекция Маркератора (основа ГИСы) как раз за счет изменения масштаба (то есть длины) делает линии прямыми. По идее линии С-Ю должны быть такими же как и на местности, а вот В-З на много длинее.
Я честно не силен в этом - говорю просто свои мысли
Изменено: Сергей Гороховецкое - 11.05.2018 14:43:00 (пояснения)
 
Если верить википедии, то проекция меркатора равноугольная, соответственно сохраняются углы за счет увеличения масштаба к полюсам.
Я плохо себе представляю, наверное на конической проекции ортодромия будет прямой линией, но это не точно :)
 
Я кое-что наврал, правильно так:  
линии С-В тоже удлиняются.
называется проекция  -- Меркатора
Все локсодромы в ней изображаются прямыми линиями. (см википедию), значит, наверно, ортодомия не будет прямой.
 
спасибо за ответы. С помощью
Цитата
Дальше, в случае mapOrthodrome, точки добавить в объект mapAppendPoint(Plane, Geo, GeoWGS84).
нарисовал нужную кривую по двум точкам. Вопрос в следующем. Есть ли в API функция вычисления второй точки кривой при известной первой угле направления на цель и расстояния до цели.
Заранее спасибо.
 
Насколько понял по описанию это:
Код
 // Прямая геодезическая задача на эллипсоиде
 // Для расстояния не более 250 км координаты определяются с ошибкой до 0,0001",
 // а обратный азимут - до 0,001", что соответствует триангуляции 1 класса
 // Способ вспомогательной точки по методу Красовского
 // Метод предназначен для расстояний меньше радиуса Земли
 // Вычисления выполняются на текущем эллипсоиде, установленном
 // в документе - mapSetDocProjection
 // Если hmap равен 0, то вычисления выполняются на эллипсоиде WGS-84
 // hmap     - идентификатор открытых данных
 // b1,l1    - геодезические координаты исходной точки
 // angle1   - азимут на вторую точку
 // distance - расстояние до второй точки
 // b2,l2    - рассчитанные координаты второй точки
 // angle2   - рассчитанный азимут со второй точки на первую
 //            (если angle2 равен 0, то обратный азимут не вычисляется)
 // При ошибке в параметрах возвращает 0

_MAPIMP long int _MAPAPI mapDirectPositionComputation(HMAP hmap,
                                                      double b1, double l1, double angle1,
                                                      double distance,
                                                      double *b2, double *l2, double *angle2);
 
Спасибо, то что надо!!!!
Страницы: 1
Читают тему (гостей: 1)



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

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