feat: copied from github.com/seddonm1/quickjs
This commit is contained in:
39
track_points.js
Normal file
39
track_points.js
Normal file
@@ -0,0 +1,39 @@
|
||||
// simple approximate distance function returning distance between two points in meters
|
||||
function distance(lat0, lon0, lat1, lon1) {
|
||||
if ((lat0 == lat1) && (lon0 == lon1)) {
|
||||
return 0;
|
||||
} else {
|
||||
const radlat0 = Math.PI * lat0 / 180;
|
||||
const radlat1 = Math.PI * lat1 / 180;
|
||||
const theta = lon0 - lon1;
|
||||
const radtheta = Math.PI * theta / 180;
|
||||
let dist = Math.sin(radlat0) * Math.sin(radlat1) + Math.cos(radlat0) * Math.cos(radlat1) * Math.cos(radtheta);
|
||||
if (dist > 1) {
|
||||
dist = 1;
|
||||
}
|
||||
dist = Math.acos(dist);
|
||||
dist = dist * 180 / Math.PI;
|
||||
return dist * 60 * 1853.159;
|
||||
}
|
||||
}
|
||||
|
||||
// calculate the total length of a set of input features in canadian football fields
|
||||
function calculate(data) {
|
||||
// canadian football fields are 140 meters
|
||||
const candadian_football_field = 140;
|
||||
|
||||
return data.features.reduce(
|
||||
(accumulator, currentValue, currentIndex, array) => {
|
||||
if (currentIndex == 0) {
|
||||
return 0
|
||||
} else {
|
||||
const previousValue = array[currentIndex - 1];
|
||||
const dist = distance(currentValue.geometry.coordinates[1], currentValue.geometry.coordinates[0], previousValue.geometry.coordinates[1], previousValue.geometry.coordinates[0]);
|
||||
return accumulator + dist / candadian_football_field
|
||||
}
|
||||
},
|
||||
0
|
||||
)
|
||||
}
|
||||
|
||||
calculate(data)
|
||||
Reference in New Issue
Block a user