diff --git a/geographical-centre/midpoint.jq b/geographical-centre/midpoint.jq new file mode 100644 index 0000000..9435b28 --- /dev/null +++ b/geographical-centre/midpoint.jq @@ -0,0 +1,23 @@ +def pi: 3.14159265; +def radians: (. * pi) / 180; +def unradians: (. * 180) / pi; + +def cartesian: (.latitude | radians) as $lat | (.longitude | radians) as $lon | { + x: (($lat | cos) * ($lon | cos)), + y: (($lat | cos) * ($lon | sin)), + z: ($lat | sin) +}; + +def average: add / length; + +map(cartesian) +| { + x: map(.x) | average, + y: map(.y) | average, + z: map(.z) | average +} +| ((.x * .x + .y * .y) | sqrt) as $hypotenuse +| { + longitude: atan2(.y; .x) | unradians, + latitude: atan2(.z; $hypotenuse) | unradians +} diff --git a/geographical-centre/points.json b/geographical-centre/points.json new file mode 100644 index 0000000..c929832 --- /dev/null +++ b/geographical-centre/points.json @@ -0,0 +1,18 @@ +[ + { + "latitude": 50.0935111, + "longitude": 8.7616557 + }, + { + "latitude": 51.3546268, + "longitude": 12.4096159 + }, + { + "latitude": 52.4616859, + "longitude": 13.3781642 + }, + { + "latitude": 49.4854674, + "longitude": 8.537643 + } +]