Вычисление кратчайшего пути между 2 точками на плоской карте Земли

Независимо, если Вы - единственный разработчик или группа разработчиков, необходимо сделать следующее, прежде чем Вы начнете кодировать ЧТО-ЛИБО :

  1. Настроенный система управления версиями . Используйте любую систему, которую Вы любите, мерзавец, SVN, Подвижный. Это не имеет значения, пока Вы знаете, как использовать его.
  2. Настроенный совместная система документации . Используйте Wiki или trac или любую другую такую систему, которую Вы знаете, как использовать.
  3. Настроенный система сборки . Использование Делает, МУРАВЕЙ, Знаток или любая другая система сборки, которую Вы знаете, как создать.
  4. Запись первое тестовые сценарии .

не кодируют одну строку главного приложения, пока Вы не сделали эти четыре

5
задан helloworlder 16 December 2009 в 03:42
поделиться

2 ответа

Я получаю такую ​​информацию из Авиационного формуляра .

В данном случае:

Расстояние между точками

Расстояние по большой окружности d между две точки с координатами Даны {lat1, lon1} и {lat2, lon2} по:

d = acos (sin (lat1) * sin (lat2) + cos (lat1) * cos (lat2) * cos (lon1-lon2))

Математически эквивалентная формула, который менее подвержен округлению ошибка для коротких расстояний:

d = 2 * asin (sqrt ((sin ((lat1-lat2) / 2)) ^ 2 + cos (lat1) * cos (lat2) * (sin ((lon1-lon2) / 2)) ^ 2))

И

Промежуточные точки на большом круге

В предыдущих разделах мы нашли промежуточные точки на большом круге учитывая либо широту пересечения, либо долгота. Здесь мы находим точки (lat, lon) заданная доля расстояние (d) между ними. Предположим, что начальная точка - (lat1, lon1), а конечная точка (lat2, lon2) и мы хотим точка дробь f вдоль большого круговой маршрут. f = 0 - это точка 1. f = 1 - это пункт 2. Эти две точки не могут быть противоположно (т.е. lat1 + lat2 = 0 и abs (lon1-lon2) = pi), потому что тогда маршрут не определен. Промежуточный затем задаются широта и долгота по:

  A = sin ((1-f) * d) / sin (d)
 B = грех (f * d) / sin (d)
 x = A * cos (lat1) * cos (lon1) + B * cos (lat2) * cos (lon2)
 y = A * cos (lat1) * sin (lon1) + B * cos (lat2) * sin (lon2)
 г = А * грех (лат1) + В * грех (лат2)
 широта = atan2 (z, sqrt (x ^ 2 + y ^ 2))
 lon = atan2 (y, x)
11
ответ дан 18 December 2019 в 14:47
поделиться

Чтобы нарисовать кратчайший путь в 3D между двумя точками на поверхности Земли на двухмерной карте поверхности Земли. , вы должны знать, как трехмерная поверхность Земли проецировалась на рассматриваемую двумерную карту. Если вы знаете используемую проекцию, вам просто нужно применить ее к кратчайшему пути в 3D, чтобы спроецировать ее на карту 2D. Если вы не знаете точную используемую проекцию, но имеете доступ к ней через какой-то интерфейс (например, входные координаты 3D поверхности -> выходные координаты 2D карты), вы можете выбрать точки вдоль пути 3D поверхности, сгенерировать соответствующую карту точки через указанный интерфейс, а затем аппроксимировать проецируемый путь с помощью отрезков линии / кривых Безье / и т. д. через предполагаемые точки отбора проб.

2
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: