如何找到HERE路由API路由的中间位置



通过执行GET-Request,我从HERE routing API接收路由信息:

https://router.hereapi.com/v8/routes?apikey=MY_API_KEY&目的地=52.530394,13.400683&原点=52.530728,13.383833&return=折线,travelSummary&transportMode=卡车&车辆[speedCap]=30&spans=名称、长度、持续时间、速度限制

现在我想找到坐标,例如在路线中间相对于总时间的坐标。所以我在下面的例子中,总持续时间是274秒。我如何才能知道,137秒后我将处于哪个位置?(在实际应用中,这些时间要长得多。为了简单起见,对于较小的JSON文件大小,我只选择了一小段距离(

首先,我考虑添加跨度的开始和结束坐标,但使用API似乎不可能。

其次,我想到了使用折线。从中我收到了很多坐标,但我认为不可能将其中一个坐标与一定的旅行时间联系起来。

有没有什么方法可以让我得到我正在寻找的信息,通过这里路由API或任何PHP计算?

{
"routes": [
{
"id": "90be4eb8-d0ba-47f8-9954-9be444576a17",
"sections": [
{
"id": "bfd32e45-662b-4b7e-a297-21eeee09dd68",
"type": "vehicle",
"departure": {
"time": "2021-12-11T23:42:04+01:00",
"place": {
"type": "place",
"location": {
"lat": 52.5307744,
"lng": 13.3838015
},
"originalLocation": {
"lat": 52.5307279,
"lng": 13.383833
}
}
},
"arrival": {
"time": "2021-12-11T23:46:38+01:00",
"place": {
"type": "place",
"location": {
"lat": 52.5303982,
"lng": 13.4006967
},
"originalLocation": {
"lat": 52.5303939,
"lng": 13.4006829
}
}
},
"travelSummary": {
"duration": 274,
"length": 1338,
"baseDuration": 264
},
"polyline": "BGslnmkDyn8wZ8CmL4Iof0F0U8BoGsEoQwCsJsEkSoBoG8BsJsE0U8BgK8BoLoB4IoB0KoBoLoBkNwC8a8B0UoB0UoBkNsEgtBkDsd8BsTkDgZsEgtB4D0jBgFwvBoG46B8B8QwCoV8BwMgFgtBUwHkD8akDgeU4NoB4XAkIoB0ZoB8pBU0K8Boa8B0PkDkS7GkD3I0F3DwC7foa7G0Fzeoaze0ZvTiQ",
"spans": [
{
"offset": 0,
"names": [
{
"value": "Invalidenstraße",
"language": "de"
}
],
"length": 189,
"duration": 31,
"speedLimit": 13.8888893
},
{
"offset": 11,
"names": [
{
"value": "Invalidenstraße",
"language": "de"
}
],
"length": 872,
"duration": 184,
"speedLimit": 8.333334
},
{
"offset": 44,
"names": [
{
"value": "Brunnenstraße",
"language": "de"
}
],
"length": 277,
"duration": 59,
"speedLimit": 8.333334
}
],
"transport": {
"mode": "truck"
}
}
]
}
]
}

使用spans对象中的信息肯定是可行的。你需要的是把跨度分解成尽可能多的部分。您可以将这些值添加到请求中的参数中:

&spans=duration,length,segmentId,names,speedLimit,dynamicSpeedInfo,baseDuration,typicalDuration,segmentRef

您将看到响应包含由偏移属性标识的跨距列表,该属性"告诉"您跨距所指的多段线中的坐标。这意味着您想知道跨距持续时间之和为137时的偏移(坐标索引(是多少。

此程序将使您获得相对于行程时间的路线中间的最佳近似值:

  1. 循环遍历跨度列表,并对duration属性中的值求和;当总和等于或大于期望的持续时间(在您的示例中为137(时,循环应该停止
  2. 获取偏移属性的值,然后加1
  3. 解码多段线,得到索引处的坐标,该坐标等于步骤2中得到的数字(偏移量+1(

对于示例中的管线,满足步骤1中条件的跨距偏移量=31,因此您对多段线索引32处的坐标感兴趣。

相关内容

  • 没有找到相关文章

最新更新