我正在尝试构建一个 Web 应用程序来显示参与虚拟跋涉的用户在地图中的位置。这些长途跋涉是在高速公路上进行的长途跋涉,通常 > 500 公里。我知道的信息是跋涉路线(起点,终点以及路点)和他相对于起点所走过的距离。
如何在 GMaps V3 中,我可以沿着谷歌地图绘制的方向绘制距离起点 x 公里的标记。
我正在尝试构建一个 Web 应用程序来显示参与虚拟跋涉的用户在地图中的位置。这些长途跋涉是在高速公路上进行的长途跋涉,通常 > 500 公里。我知道的信息是跋涉路线(起点,终点以及路点)和他相对于起点所走过的距离。
如何在 GMaps V3 中,我可以沿着谷歌地图绘制的方向绘制距离起点 x 公里的标记。
想通了这个。该技术涉及获取各个纬度长步并逐步计算距离。各个步骤足够接近,可以在两个连续点之间进行直线逼近。对最后一个过冲点进行反向移动。
与距离无关,错误率为 0.1%。即 2000 公里的距离将在地图上偏离 2 公里。
//Returns the Google LatLng object corresponding to distanceInKM for the given route.
//Params : directionResult : The google.maps.DirectionsResult obtained from DirectionService.route(request:DirectionsRequest, callback:function(DirectionsResult, DirectionsStatus))
//distanceInKM : The distance offset with respect to the starting point.
function getLatLngOnRoute(directionResult, distanceInKM) {
var lastPos=directionResult.routes[0].legs[0].steps[0].path[0]; var currPos;
var distance=0.0;
distanceInKM*=1000;
//Will not consider alternate routes.
for (var j=0; j<directionResult.routes[0].legs.length; j++) {
//There may be multiple legs, each corresponding to one way point. If there are no way points specified, there will be a single leg
for (var k=0; k<directionResult.routes[0].legs[j].steps.length; k++) {
//There will be multiple sub legs or steps
for (var l=0; l<directionResult.routes[0].legs[j].steps[k].path.length; l++) {
currPos=directionResult.routes[0].legs[j].steps[k].path[l];
//Calculate the distance between two lat lng sets.
distance+=google.maps.geometry.spherical.computeDistanceBetween(lastPos, currPos);
if (distance>distanceInKM) {
//If the exact point comes between two points, use distance to lat-lng conversion
var heading=google.maps.geometry.spherical.computeHeading(currPos, lastPos);
var l= google.maps.geometry.spherical.computeOffset(currPos, distance-distanceInKM, heading);
return l;
}
lastPos=currPos;
}
}
}
}
这个话题让我朝着正确的方向前进。