【发布时间】:2017-08-27 07:17:15
【问题描述】:
如何计算 Leaflet-ionic2 中两个标记之间的距离?
想不通,我希望有一个算法可以在我选择标记后立即显示我的位置与标记之间的距离。
谢谢..
【问题讨论】:
标签: geolocation ionic2 leaflet
如何计算 Leaflet-ionic2 中两个标记之间的距离?
想不通,我希望有一个算法可以在我选择标记后立即显示我的位置与标记之间的距离。
谢谢..
【问题讨论】:
标签: geolocation ionic2 leaflet
您可以使用此功能查找 2 个位置之间的距离。
function getDistance(origin, destination) {
// return distance in meters
var lon1 = toRadian(origin[1]),
lat1 = toRadian(origin[0]),
lon2 = toRadian(destination[1]),
lat2 = toRadian(destination[0]);
var deltaLat = lat2 - lat1;
var deltaLon = lon2 - lon1;
var a = Math.pow(Math.sin(deltaLat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(deltaLon/2), 2);
var c = 2 * Math.asin(Math.sqrt(a));
var EARTH_RADIUS = 6371;
return c * EARTH_RADIUS * 1000;
}
function toRadian(degree) {
return degree*Math.PI/180;
}
var distance = getDistance([lat1, lng1], [lat2, lng2])
我们在我们的库 time-aware-polyline 中使用这个函数来编码带有时间戳的 lat lng 信息。
【讨论】:
Leaflet manual 提到了 distanceTo 函数,它以米为单位计算距离。
抄袭自Google Groups的例子:
function createMarker()
{
var markerFrom = L.circleMarker([28.6100,77.2300], { color: "#F00", radius: 10 });
var markerTo = L.circleMarker([18.9750,72.8258], { color: "#4AFF00", radius: 10 });
var from = markerFrom.getLatLng();
var to = markerTo.getLatLng();
markerFrom.bindPopup('Delhi ' + (from).toString());
markerTo.bindPopup('Mumbai ' + (to).toString());
map.addLayer(markerTo);
map.addLayer(markerFrom);
getDistance(from, to);
}
function getDistance(from, to)
{
var container = document.getElementById('distance');
container.innerHTML = ("New Delhi to Mumbai - " + (from.distanceTo(to)).toFixed(0)/1000) + ' km';
}
【讨论】: