Геометрия: найти точку на определенном расстоянии между двумя точками

Это похоже на этот вопрос, но отчасти наоборот.

У меня есть две географические точки (широта, долгота) 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'}))
Другие вопросы по тегам