Как найти координаты точки по середине между двумя другими точками?

Всем привет!

Использую JS

У меня есть 2-(две) точки c координатами по широте и долготе

мне нужно найти точку между ними(по середине), а точнее ее координаты

Подскажите пожалуйста как это сделать?


Ответы (4 шт):

Автор решения: Alex Favn

x = (x1+x2)/2 y = (y1+y2)/2

Отличия от координат на плоскости никаких нет

→ Ссылка
Автор решения: Александр Родин

Просто представте эту линию как гипотенузу в треугольнике с катетами.
Первый катет (x2 + x1)/2, второй (y2 + y1)/2, это и есть координаты, на пересечении которых будет середина гипотенузы.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Идея решения: от координат вида (широта, долгота) перейти к точкам в прострастве (x, y, z). Для двух таких точек посчитать среднее по формулам ((x1 + x2) / 2, ...). Из средней точки восстановить широту и долготу.

midLatlon решает задачу:

const degToRad = a => Math.PI / 180 * a;
const radToDeg = a => 180 / Math.PI * a;

const latlonToXyz = latlon => {
    const [lat, lon] = latlon.map(degToRad);
    return [
        Math.cos(lat) * Math.cos(lon),
        Math.cos(lat) * Math.sin(lon),
        Math.sin(lat)
    ];
};

const xyzToLatlon = xyz => {
    const [x, y, z] = xyz;
    return [
        Math.atan2(z, (x ** 2 + y ** 2) ** 0.5),
        Math.atan2(y, x)
    ].map(radToDeg);
};

const midXyz = (xyz1, xyz2) => [
    (xyz1[0] + xyz2[0]) / 2,
    (xyz1[1] + xyz2[1]) / 2,
    (xyz1[2] + xyz2[2]) / 2
];

const midLatlon = (latlon1, latlon2) => xyzToLatlon(midXyz(
    latlonToXyz(latlon1),
    latlonToXyz(latlon2)
)); 

const test = (latlon1, latlon2) => {
    console.log(JSON.stringify([latlon1, latlon2, midLatlon(latlon1, latlon2)]));
};

test([60, 45], [60, 45]); 
test([60, 45], [61, 46]); 
test([0, 90], [90, 0]); 
test([80, 90], [80, -90]); 

→ Ссылка
Автор решения: Alexey Romanov

Просто полусуммы не дадут нужный результат, т.к. нужно учитывать полушария.

При проектировании геоида на плоскость, в соответствии с используемой картографической проекцией, в свое время учитывал в представлении знаков декартовой плоскости:

СВ = (+,+), СЗ = (-,+), ЮВ = (+,-), ЮЗ = (-,-)
→ Ссылка