Я думаю, что ваша проблема в том, "Как я могу вычислить точку пересечения двух линий?" (L1 и L2 ради простоты)
Вы должны получить уравнение линий y = mx + q, которое вычисляет коэффициент m и q для L1 и L2, чтобы получить два уравнения:
y = m1x + q1
y = m2x + q2
пересечение есть решение этой линейной системы
x = (q1 - q2) / (м2 - м1); у = м2 / (м2-м1) * (q1 - q2) + q2
// Пожалуйста, проверьте уравнения, которые я пишу, вычисляя это на лету
Ваши данные - это две точки на эллипсоиде и два угла (опора):
P1 = [x1; у1], подшипник1 = альфа1
Р2 = [х2; у2], подшипник1 = альфа2
Вы должны спроецировать точки на равнине, чтобы использовать вышеуказанную линейную геометрию.
Я полагаю, у вас есть очки WGS84: используйте proj4
api.
Так что теперь проблема состоит в том, чтобы получить классическое линейное уравнение из данных.
Но мы можем рассматривать строки в полярной интерпретации:
Для точки P0 = [x0, y0] и угла (альфа) линейное уравнение P (t) равно
L (t) = [x0 + cos (альфа) * t, y0 + cos (альфа) * t], где t находится в диапазоне [-inf, + inf]
Итак
L1 (t) = [y1 + cos (alfa1) * t, y1 + cos (alfa1) * t];
L2 (t) = [y2 + cos (alfa2) * t, y2 + cos (alfa2) * t];
Разрешение вышеуказанной системы у нас:
T = (x1- x2) / (cos (alfa2) - cos (alfa1))
X = x1 + cos (alfa1) * T
Y = y1 + sin (alfa1) * T
ваше решение [X, Y].
После этого вам нужно перепроектировать обратно в wgs84
Вы можете попытаться избежать проецирования данных и напрямую использовать координаты wgs84 для p1 и P2; ошибка может быть небольшой, но вы должны проверить.
(Пожалуйста, проверьте это; я написал это в середине сеанса отладки JavaScript :-)
procedure FindIntersection(x1, y2, alfa1, x2, y2, alfa2: double;
out x, y: double);
var
t: double;
begin
t := (x1 - x2) / (cos(alfa2) - cos(alfa1));
x := x1 + cos(alfa1) * t;
y := y1 + sin(alfa1) * t;
end; (* Solution without reprojecting *)