Геометрия: найти точку на определенном расстоянии между двумя точками
Это похоже на этот вопрос, но отчасти наоборот.
У меня есть две географические точки (широта, долгота) A и B. Допустим, они на расстоянии 40 морских миль друг от друга. Я хотел бы рассчитать координаты точки в 10 морских милях от точки А, на линии между А и В. Я уверен, что это очень базовая математика, но это были ГОДЫ, так как мне приходилось делать такого рода математика (некоторые другие виды, которые я использую ежедневно), поэтому я застрял. Любые указатели будут с благодарностью. Мой код для этого проекта написан на Python, но математика не зависит от языка, поэтому меня это не особо беспокоит - я просто хочу знать формулу.
4 ответа
У вас есть два вектора положения с (широта, долгота). Из них вы можете рассчитать направление из точки А в точку Б (если вы еще этого не знаете). С азимутом и расстоянием вы можете рассчитать вашу новую широту и долготу.
Вся математика, которую вы должны знать, приведена здесь: http://www.movable-type.co.uk/scripts/latlong.html. Я имею дело с этим материалом так редко, что приятно сохранить эту ссылку где-нибудь (читай: напечатано).
Итак, это что-то вроде:
x B (x2,y2)
\
\
\
\
x C (x3, y3)
\
\
\
X A (x1,y1)
То, как я это сделаю, это сначала найти угол этой линии:
angle_A_B = arctan((y2-y1)-(x2-x1))
тогда известно расстояние между A и C (назовем это distance_A_C):
sin(angle_A_B) = delta_x_A_C / distance_A_C
delta_x_A_C = distance_A_C * sin(angle_A_B)
следовательно:
x3 = x1+delta_x_A_C
то же самое для значения y3:
delta_y_A_C = distance_A_C * cos(angle_A_B)
следовательно:
y3 = y1+delta_y_A_C
Я, возможно, перепутал знаки, так что, если это не работает, измените +
в -
,
Я считаю, что здесь можно применить формулу Хаверсина. Если это поможет, я реализовал это в C#, Java и Javascript?
Вы можете использовать мой простой пакет, чтобы помочь вам: Ссылка: https://www.npmjs.com/package/haversine-calculator
const haversineCalculator = require('haversine-calculator')
const start = {
latitude: -23.754842,
longitude: -46.676781
}
const end = {
latitude: -23.549588,
longitude: -46.693210
}
console.log(haversineCalculator(start, end))
console.log(haversineCalculator(start, end, {unit: 'meter'}))
console.log(haversineCalculator(start, end, {unit: 'mile'}))
console.log(haversineCalculator(start, end, {threshold: 1}))
console.log(haversineCalculator(start, end, {threshold: 1, unit: 'meter'}))
console.log(haversineCalculator(start, end, {threshold: 1, unit: 'mile'}))