Когда вы говорите «это не обязательно должно быть очень точным», вы не говорите , как неточное решение, которое вы готовы принять. Кроме того, вы не говорите, насколько велика рассматриваемая географическая область. Эти два критерия имеют большое значение для подхода, который необходимо принять.
Для небольших областей (скажем, в нескольких километрах) плоское приближение может быть достаточно хорошим (например, проекция Меркатора), и некоторые другие ответы говорят вам, как это сделать. Для более крупных регионов необходимо учитывать сферичность Земли. И если вы хотите получить погрешность менее процента или около того, вам нужно принять во внимание эксцентриситет Земли.
Я собираюсь предположить для целей этого ответа, что сферическое приближение достаточно хорошее, и что ваши точки находятся на достаточно похожих высотах, поэтому нам не нужно беспокоиться об их высоте.
Вы можете преобразовать географическую точку (ψ, λ) в декартовые земно-центрированные координаты, используя преобразование
(ψ, λ) & rarr; (cos (ψ) cos (λ), cos (ψ) sin (λ), sin (ψ))
где a - средний радиус Земли (6 371 км). Итак, давайте предположим, что две точки, которые определяют вашу линию - это p₀ и p₁; тогда самая короткая линия, проходящая через p₀ и p₁, представляет собой большой круг, который определяет плоскость, которая разрезает Землю на две половины, с нормальной n = p₀ × p₁.
Теперь нам нужно найти границу круговой области. Предположим, что центр этой области находится в точке c, а радиус поверхности области равен s. Тогда прямой радиус области равен r = sin (s / a). Нам также понадобится истинный центр круговой области, c ’= c cos (s / a). (Эта точка похоронена глубоко под землей!)
Мы хотели бы пересечь два круга и найти точки пересечения. К сожалению, из-за численной неточности, есть вероятность, что эта процедура никогда не найдет никаких решений, потому что неточные круги будут скучать друг по другу в трех измерениях. Поэтому я предлагаю следующую процедуру: пересекать плоскости двух окружностей, получая пунктирную линию, показанную ниже (если только c '× n = 0, в этом случае две окружности параллельны и либо c' = o, и в этом случае они совпадают или же они не пересекаются). Затем пересечь линию с круговой областью.
Эта двухэтапная процедура сводит проблему к двум измерениям и гарантирует, что решение будет найдено, даже если из-за неточности чисел два круга пропускаются в трех измерениях.
Если вам нужна большая точность, чем эта, тогда вам может понадобиться геодезические координаты на эталонном эллипсоиде, таком как WGS 1984 .