我有来自 Google Directions API 的路线,它有起点和终点,中间有许多点。如果你从一个点开始并沿着这条路线走 X 分钟,有什么方法可以计算出你会在哪里?
基本上,有没有什么方法可以获取具有特定长度行程时间而不仅仅是距离的路线段?
最佳答案
假设(我从你的问题中推测)你有一个有效的 google.maps.DirectionsResult对象。
这个对象有一个routes
属性,它是一个google.maps.DirectionsRoute类型的对象.通常你只有一条路线。所述路线将有一个 legs
属性,它是 google.maps.DirectionsLeg 的数组。 .
此时,你可以说你有一个变量legs
,它是
var legs = myDirectionsResult.routes[0].legs;
可以有一条或多条腿(根据您的航路点)。每条腿都有一个 steps
属性,它是 google.maps.DirectionsStep 的数组。 .
每个步骤都有属性,例如 start_location
、end_location
、duration
和 distance
。
因此,最后,您可以获得路线的步数:
var steps = myDirectionsResult
.routes[0]
.legs
.reduce(function(accum,leg) {
accum=accum.concat(leg.steps);
return accum;
},[]);
现在您可以迭代这些步骤,直到达到您的时间限制:
var currentStep,
duration,
start_location,
end_location,
timeSpent,
totalSteps = steps.length,
timelimit = 900; // seconds.
for(var i=0; i < totalSteps; i++) {
currentStep = steps[i];
duration = currentStep.duration.value;
start_location= currentStep.start_location;
end_location = currentStep.end_location;
if(timeSpent + duration > timelimit) {
break;
}
timeSpent = timeSpent + duration;
}
所以让我们分解一下。您有一系列步骤和时间限制。您遍历这些步骤。在每个步骤的开始,您检查完成此步骤是否会使您的旅行时间超出您的时间限制,在这种情况下,您将打破循环。否则,您将步骤的持续时间添加到您花费的时间中,然后继续执行下一个步骤。
自从您开始声明您的时间限制为 900 秒后,您最终将到达一个您已花费 850 秒的时间点,而当前步骤的持续时间为 100 秒,因此您无法完成此步骤。您已经设置了此步骤的开始和结束位置,因此您打破了循环并且您知道您可以到达这两个位置之间的某个位置,直到您完成您的时间限制。
在这种情况下,该步骤的持续时间为 100 秒,而您只剩下 50 秒,因此您知道您已到达当前步骤的起点和终点位置之间的中点。您需要在这些位置之间进行插值才能知道最终坐标。如果您认为对于小距离,坐标之间的差异表现得像在笛卡尔平面上,您可以手动执行此操作。 (参见 Small Angle Aproximation )但您也可以使用谷歌地图的几何库(参见 google.maps.geometry.spherical.interpolate )
关于javascript - 有什么方法可以沿着 Google Directions 路线前进 X 分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124734/