Как найти координаты точки по середине между двумя другими точками?
Всем привет!
Использую JS
У меня есть 2-(две) точки c координатами по широте и долготе
мне нужно найти точку между ними(по середине), а точнее ее координаты
Подскажите пожалуйста как это сделать?
Ответы (4 шт):
x = (x1+x2)/2 y = (y1+y2)/2
Отличия от координат на плоскости никаких нет
Просто представте эту линию как гипотенузу в треугольнике с катетами.
Первый катет (x2 + x1)/2, второй (y2 + y1)/2, это и есть координаты, на пересечении которых будет середина гипотенузы.
Идея решения: от координат вида (широта, долгота) перейти к точкам в прострастве (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]);
Просто полусуммы не дадут нужный результат, т.к. нужно учитывать полушария.
При проектировании геоида на плоскость, в соответствии с используемой картографической проекцией, в свое время учитывал в представлении знаков декартовой плоскости:
СВ = (+,+), СЗ = (-,+), ЮВ = (+,-), ЮЗ = (-,-)