JSFiddle - React, Tailwind, and code Playground
by Julian Garcia Castillo
JavaScript
// get center of coordinates
let coords = [
[36.603348, -4.541657], // carrefour
[36.606640, -4.533901], // freiduria villalba
[36.600558, -4.534936] // oficina correos
]
console.log(getCenterCoords(coords))
function getCenterCoords(coords) {
const LATIDX = 0;
const LNGIDX = 1;
let sumX = 0;
let sumY = 0;
let sumZ = 0;
function _getRadians(degrees) {
return degrees * Math.PI / 180;
}
function _getDegrees(radians) {
return radians * 180 / Math.PI;
}
for (var i = 0; i < coords.length; i++) {
var lat = _getRadians(coords[i][LATIDX]);
var lng = _getRadians(coords[i][LNGIDX]);
// sum of cartesian coordinates
sumX += Math.cos(lat) * Math.cos(lng);
sumY += Math.cos(lat) * Math.sin(lng);
sumZ += Math.sin(lat);
}
var avgX = sumX / coords.length;
var avgY = sumY / coords.length;
var avgZ = sumZ / coords.length;
// convert average x, y, z coordinate to latitude and longtitude
var lng = Math.atan2(avgY, avgX);
var hyp = Math.sqrt(avgX * avgX + avgY * avgY);
var lat = Math.atan2(avgZ, hyp);
return {
"latitude": _getDegrees(lat),
"longitude": _getDegrees(lng)
};
}