javascript - 如何计算按钮单击中多个坐标之间的距离?
问题描述
< script >
const start = document.querySelector("#start");
const stop = document.querySelector("#stop");
const calculate = document.querySelector("#calculate");
// const coordinates = [];
// const coordinates1 = [];
var lat_1 = [];
var lon_1 = [];
var lat_2 = [];
var lon_2 = [];
start.addEventListener("click", () => {
navigator.geolocation.getCurrentPosition(data => {
console.log(data);
lat_1.push([data.coords.latitude]);
lon_1.push([data.coords.longitude]);
window.localStorage.setItem(
"lat1",
JSON.stringify(lat_1)
);
window.localStorage.setItem(
"lon1",
JSON.stringify(lon_1)
);
},
(error) => console.log(error), {
enableHighAccuracy: true
}
);
});
stop.addEventListener("click", () => {
navigator.geolocation.getCurrentPosition(data => {
console.log(data);
lat_2.push([data.coords.latitude]);
lon_2.push([data.coords.longitude]);
window.localStorage.setItem(
"lat2",
JSON.stringify(lat_2)
);
window.localStorage.setItem(
"lon2",
JSON.stringify(lon_2)
);
},
(error) => console.log(error), {
enableHighAccuracy: true
}
);
});
//Converts coordinates in degrees to radians.
function toRad(degrees) {
return degrees * Math.PI / 180;
}
for (var i = 0; i < data.coords.length - 1; i++) {
distanceTotal += google.maps.geometry.spherical.computeDistanceBetween(coords[i], coords[i + 1]);
}
// let sum = 0;
//for (let i = 0; i = 100; i++) {
//Harvensine Formula
function calculateDistance() {
//Get values of our inputs
var late_1 = window.localStorage.getItem("lat1");
var lat1 = JSON.parse(late_1);
var long_1 = window.localStorage.getItem("lon1");
var lon1 = JSON.parse(long_1);
var late_2 = window.localStorage.getItem("lat2");
var lat2 = JSON.parse(late_2);
var long_2 = window.localStorage.getItem("lon2");
var lon2 = JSON.parse(long_2);
// Radius of earth, KM
var radiusOfEarth = 6371;
var lattitudeDifference = lat2 - lat1;
var dLat = toRad(lattitudeDifference);
var longitudeDifference = lon2 - lon1;
var dLon = toRad(longitudeDifference);
/*
a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c
where φ is latitude, λ is longitude, R is earth’s radius
Assumes that the earth radius is 6,371 KM
*/
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var distance = radiusOfEarth * c;
distance = parseFloat(distance).toFixed(2);
var distanceInMiles = 0.62137119 * distance
distanceInMiles = parseFloat(distanceInMiles).toFixed(2);
//document.getElementById('distance').innerHTML = distance + " km, or " + distanceInMiles + "mi.";
//sum + distance[i];
console.log(distance, distanceInMiles);
}
//}
<
/script>
我有一个代码来计算两个坐标之间的距离,但我想计算多个坐标之间的距离,我尝试使用 Harvensine 公式遍历数组,但我做不到,请帮助我。
强调文字你好,我想计算一个按钮点击中多个坐标之间的距离,你能帮帮我吗,我在下面附上了我的代码。我的意思是,如何使用 Harvensine 公式遍历数组。
解决方案
推荐阅读
- python - 在一小时后 X 分钟时中断请求流
- r - 未列出数据框产生意外结果
- ruby-on-rails - Rails 查询对象未加载
- reactjs - 第一次测试运行时未创建快照
- database - mongodb schema 最佳存储成就系统
- javascript - AngularJs 过滤器:生成 notArray 错误
- timestamp - Zip Archive - 手动设置本地和中央标头的最后修改时间戳
- typo3 - 恢复备份后 TYPO3 出现 CMS 错误
- blob - blob 相对于视频网址的优势
- java - 即使在我停止按键后,keyPressed() 事件也会继续触发