js实现测距
使用Geolocation API获取位置坐标
通过浏览器内置的Geolocation API可以获取用户设备的经纬度坐标。需要用户授权位置权限后,调用navigator.geolocation.getCurrentPosition()方法:

navigator.geolocation.getCurrentPosition(
(position) => {
const lat1 = position.coords.latitude;
const lon1 = position.coords.longitude;
console.log(`当前位置: ${lat1}, ${lon1}`);
},
(error) => {
console.error("获取位置失败:", error.message);
}
);
计算两点间距离(Haversine公式)
已知两个点的经纬度坐标$(lat1, lon1)$和$(lat2, lon2)$,使用Haversine公式计算球面距离:

function calculateDistance(lat1, lon1, lat2, lon2) {
const R = 6371; // 地球半径(km)
const dLat = (lat2 - lat1) * Math.PI / 180;
const dLon = (lon2 - lon1) * Math.PI / 180;
const a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1 * Math.PI / 180) *
Math.cos(lat2 * Math.PI / 180) *
Math.sin(dLon/2) * Math.sin(dLon/2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return R * c; // 返回公里数
}
实现完整测距流程
结合位置获取和距离计算,实现完整测距功能:
// 目标点坐标(示例:纽约市)
const targetLat = 40.7128;
const targetLon = -74.0060;
navigator.geolocation.getCurrentPosition(
(position) => {
const distance = calculateDistance(
position.coords.latitude,
position.coords.longitude,
targetLat,
targetLon
);
console.log(`距离目标点: ${distance.toFixed(2)}公里`);
},
(error) => {
console.error("定位错误:", error.message);
}
);
注意事项
Geolocation API仅在HTTPS环境或localhost下可用,部分浏览器可能需要用户明确授权。移动设备通常比桌面设备定位更精确。
计算结果为直线距离,实际路径距离可能更长。对于高精度需求场景,建议使用专业地图API(如Google Maps Distance Matrix API)。





