Формула, чтобы определить, пересекает ли форма линии 2 географических точек (широта, долгота) географический регион (круг)? - PullRequest
1 голос
/ 19 февраля 2009

Это не должно быть очень точным. Кто-нибудь знает хороший способ сделать это?

любая помощь высоко ценится.

Ответы [ 5 ]

5 голосов
/ 22 февраля 2009

Когда вы говорите «это не обязательно должно быть очень точным», вы не говорите , как неточное решение, которое вы готовы принять. Кроме того, вы не говорите, насколько велика рассматриваемая географическая область. Эти два критерия имеют большое значение для подхода, который необходимо принять.

Для небольших областей (скажем, в нескольких километрах) плоское приближение может быть достаточно хорошим (например, проекция Меркатора), и некоторые другие ответы говорят вам, как это сделать. Для более крупных регионов необходимо учитывать сферичность Земли. И если вы хотите получить погрешность менее процента или около того, вам нужно принять во внимание эксцентриситет Земли.

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

Вы можете преобразовать географическую точку (ψ, λ) в декартовые земно-центрированные координаты, используя преобразование

(ψ, λ) & rarr; (cos (ψ) cos (λ), cos (ψ) sin (λ), sin (ψ))

где a - средний радиус Земли (6 371 км). Итак, давайте предположим, что две точки, которые определяют вашу линию - это p₀ и p₁; тогда самая короткая линия, проходящая через p₀ и p₁, представляет собой большой круг, который определяет плоскость, которая разрезает Землю на две половины, с нормальной n = p₀ × p₁.

image

Теперь нам нужно найти границу круговой области. Предположим, что центр этой области находится в точке c, а радиус поверхности области равен s. Тогда прямой радиус области равен r = sin (s / a). Нам также понадобится истинный центр круговой области, c ’= c cos (s / a). (Эта точка похоронена глубоко под землей!)

image

Мы хотели бы пересечь два круга и найти точки пересечения. К сожалению, из-за численной неточности, есть вероятность, что эта процедура никогда не найдет никаких решений, потому что неточные круги будут скучать друг по другу в трех измерениях. Поэтому я предлагаю следующую процедуру: пересекать плоскости двух окружностей, получая пунктирную линию, показанную ниже (если только c '× n = 0, в этом случае две окружности параллельны и либо c' = o, и в этом случае они совпадают или же они не пересекаются). Затем пересечь линию с круговой областью.

image

Эта двухэтапная процедура сводит проблему к двум измерениям и гарантирует, что решение будет найдено, даже если из-за неточности чисел два круга пропускаются в трех измерениях.

Если вам нужна большая точность, чем эта, тогда вам может понадобиться геодезические координаты на эталонном эллипсоиде, таком как WGS 1984 .

2 голосов
/ 20 февраля 2009

Я бы сказал, найдите ближайшую точку на линии к центру круга, затем определите, находится ли эта точка внутри круга (то есть рассматриваемое расстояние меньше или равно окружности круга). радиус).

1 голос
/ 22 февраля 2009

Этот вопрос слишком расплывчат, чтобы дать точный ответ. Что вы подразумеваете под

форма линии с двумя географическими точками (широта, долгота)

Это может быть либо большой круг , проходящий через них (также называемый ортодромом), либо a может быть линейной функцией сферических координат ( локсодром ).

Кстати, я предполагаю, что ваш круг - это круг на поверхности сферы, верно?

1 голос
/ 22 февраля 2009

Схема для решения проблемы: предположим, что Земля - ​​это сфера радиуса с центром в начале координат. Преобразовать все три точки в трехмерные координаты. Две точки линии плюс начало координат определяют плоскость; пересекают эту плоскость со сферой радиуса d с центром в другой точке. Если пересечения с плоскостью и сферой нет, то ответом является линия, не пересекающая область. Если имеется пересечение плоской сферы, то задача упрощается путем пересечения круговой области, определяемой пересечением плоской сферы с самой короткой дугой окружности на плоскости, проходящей между конечными точками линии и центрированной в начале координат. Это простая двумерная проблема, если вы преобразуетесь в систему координат плоскости.

0 голосов
/ 20 февраля 2009

Предполагается, что линия образована точками (x1, y1) и (x2, y2), а круг имеет радиус r с началом (0,0):

Рассчитать: Заболеваемость = r ^ 2 * [(x2 - x1) ^ 2 + (y2 - y1) ^ 2] - (x1 * y2 - x2 * y1) ^ 2

Тогда по значению заболеваемости мы можем определить следующее: Заболеваемость <0: нет пересечения Заболеваемость = 0: Касательная (пересечение в 1 точке на окружности) Заболеваемость> 0: пересечение

Скорее всего, ваш круг не в начале координат (0,0), поэтому, чтобы исправить это, просто добавьте исходные координаты из координат линии в приведенном выше уравнении. Таким образом, если окружность находится в точке (x3, y3), x1 в приведенном выше уравнении станет x1 + x3. Аналогично, y1 будет y1 + y3, и то же самое относится к x2 и y2.

Для получения дополнительной информации проверьте эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...