Что касается приведенной ниже геометрической диаграммы, единственная координата, которую вам нужно рассчитать, - - (x2, y2)
, а остальные две координаты, которые вы можете рассчитать, используя текущую длину, широту - (x1, y1)
и вычисленную - (x2, y2)
Таким образом, в основном вам нужна функция, которая будет принимать текущий lat, long, то есть - (x1, y1)
, расстояние, которое в вашем примере составляет √2 * 10km
и угол опоры в точку (x2, y2)
, который при 135
градусах.
let llFromDistance = function(latitude, longitude, distance, bearing) {
// taken from: https://stackoverflow.com/a/46410871/13549
// distance in KM, bearing in degrees
const R = 6378.1; // Radius of the Earth
const brng = bearing * Math.PI / 180; // Convert bearing to radian
let lat = latitude * Math.PI / 180; // Current coords to radians
let lon = longitude * Math.PI / 180;
// Do the math magic
lat = Math.asin(Math.sin(lat) * Math.cos(distance / R) + Math.cos(lat) * Math.sin(distance / R) * Math.cos(brng));
lon += Math.atan2(Math.sin(brng) * Math.sin(distance / R) * Math.cos(lat), Math.cos(distance / R) - Math.sin(lat) * Math.sin(lat));
// Coords back to degrees and return
return [(lat * 180 / Math.PI), (lon * 180 / Math.PI)];
}
console.log(llFromDistance(19.0659115, 72.8574557, Math.sqrt(2)*10, 135))