通过 GET 计算路线 - 折线不正确
Calculate routes via GET - Polyline incorrect
我正在测试路由 API(https://developer.here.com/documentation/routing-api/api-reference-swagger.html),除折线外,一切似乎都按预期工作。
这里分享一下我的服务调用
curl --location --request GET 'https://router.hereapi.com/v8/routes?transportMode=car&origin=3.4844257,-76.5256287&destination=3.478483,-76.517984&routingMode=fast&return=elevation,polyline,actions,instructions,summary&apiKey=1234'
作为响应的一部分,我们有下一个字段:
"折线": "B2Fkt10Grm4-xE8yTU4mBnBnG8pBAzP0tBAjD4IA_E8LAvMokBT3IkXTzF8QTnG8QTvMsiBTrJjDA3_BjXoB_sB_OAriB3NAzKjDAnLsTAnLkhBnBzKsdA_J8fTnLkcT3DwHAvC8GArJoQAnL8QA7LsTA7V0jBT_M8UA",
如您所知,折线字段已编码。
根据文档,我继续使用 library/code 的建议对其进行解码:
https://github.com/heremaps/flexible-polyline/tree/master/java
字段解码结果不正确。返回的点列表(Lat、Long、Elevation)与正确的位置不匹配。在示例中,坐标来自哥伦比亚,解码后的结果是 returns 大西洋中部的点列表。
此外,为了排除库问题,我正在使用其他解码器检查 depolyline 的解码:
- https://developers.google.com/maps/documentation/utilities/polylineutility
- https://open-polyline-decoder.60devs.com/
结果是一样的
所以,问题似乎出在这里API side(API routing v8)
有什么想法吗?也许我以不正确的方式调用 API
我建议从您在问题中发布的获取请求中删除您的 API 密钥。
使用您提供的折线被解码为哥伦比亚的以下内容。因此,我认为您需要检查您正在使用的解码器 and/or 输入的是什么。
Index
Lat
Lon
Elev
0
3.48437
-76.52567
1003
1
3.48438
-76.52505
1001
2
3.48428
-76.52438
1001
3
3.48403
-76.52365
1001
4
3.48398
-76.52351
1001
5
3.4839
-76.52332
1001
6
3.4837
-76.52274
1000
7
3.48356
-76.52237
999
8
3.48347
-76.5221
998
9
3.48337
-76.52183
997
10
3.48317
-76.52128
996
11
3.48302
-76.52133
996
12
3.482
-76.5217
998
13
3.48128
-76.52194
998
14
3.48073
-76.52216
998
15
3.48056
-76.52221
998
16
3.48038
-76.5219
998
17
3.4802
-76.52137
996
18
3.48003
-76.5209
996
19
3.47987
-76.52039
995
20
3.47969
-76.51994
994
21
3.47963
-76.51982
994
22
3.47959
-76.51971
994
23
3.47944
-76.51945
994
24
3.47926
-76.51918
994
25
3.47907
-76.51887
994
26
3.47872
-76.5183
993
27
3.478512
-76.517966
993
https://github.com/heremaps/flexible-polyline/tree/master/java 上的解码器工作正常,请参阅使用您的编码字符串编码:
private void testSOLatLngDecoding() {
List<LatLngZ> computed = decode("B2Fkt10Grm4-xE8yTU4mBnBnG8pBAzP0tBAjD4IA_E8LAvMokBT3IkXTzF8QTnG8QTvMsiBTrJjDA3_BjXoB_sB_OAriB3NAzKjDAnLsTAnLkhBnBzKsdA_J8fTnLkcT3DwHAvC8GArJoQAnL8QA7LsTA7V0jBT_M8UA");
List<String> seqCrds = new ArrayList<>();
for (int i = 0; i < computed.size(); ++i) {
LatLngZ c = computed.get(i);
List<String> crds = new ArrayList<>();
crds.add(String.valueOf(c.lat));
crds.add(String.valueOf(c.lng));
crds.add(String.valueOf(c.z));
seqCrds.add(String.join(",", crds));
//assertEquals(computed.get(i), pairs.get(i));
}
System.out.println(String.join(",", seqCrds));
}
我们在 https://demo.support.here.com/examples/v3.1/enc_dec_flexible_polyline
上有一个 javascript 工具“Encode/Decode to/from 灵活多段线”
请看结果:
请仔细检查您这边的代码。
我正在测试路由 API(https://developer.here.com/documentation/routing-api/api-reference-swagger.html),除折线外,一切似乎都按预期工作。
这里分享一下我的服务调用
curl --location --request GET 'https://router.hereapi.com/v8/routes?transportMode=car&origin=3.4844257,-76.5256287&destination=3.478483,-76.517984&routingMode=fast&return=elevation,polyline,actions,instructions,summary&apiKey=1234'
作为响应的一部分,我们有下一个字段:
"折线": "B2Fkt10Grm4-xE8yTU4mBnBnG8pBAzP0tBAjD4IA_E8LAvMokBT3IkXTzF8QTnG8QTvMsiBTrJjDA3_BjXoB_sB_OAriB3NAzKjDAnLsTAnLkhBnBzKsdA_J8fTnLkcT3DwHAvC8GArJoQAnL8QA7LsTA7V0jBT_M8UA",
如您所知,折线字段已编码。 根据文档,我继续使用 library/code 的建议对其进行解码:
https://github.com/heremaps/flexible-polyline/tree/master/java
字段解码结果不正确。返回的点列表(Lat、Long、Elevation)与正确的位置不匹配。在示例中,坐标来自哥伦比亚,解码后的结果是 returns 大西洋中部的点列表。
此外,为了排除库问题,我正在使用其他解码器检查 depolyline 的解码:
- https://developers.google.com/maps/documentation/utilities/polylineutility
- https://open-polyline-decoder.60devs.com/
结果是一样的
所以,问题似乎出在这里API side(API routing v8)
有什么想法吗?也许我以不正确的方式调用 API
我建议从您在问题中发布的获取请求中删除您的 API 密钥。
使用您提供的折线被解码为哥伦比亚的以下内容。因此,我认为您需要检查您正在使用的解码器 and/or 输入的是什么。
Index | Lat | Lon | Elev |
---|---|---|---|
0 | 3.48437 | -76.52567 | 1003 |
1 | 3.48438 | -76.52505 | 1001 |
2 | 3.48428 | -76.52438 | 1001 |
3 | 3.48403 | -76.52365 | 1001 |
4 | 3.48398 | -76.52351 | 1001 |
5 | 3.4839 | -76.52332 | 1001 |
6 | 3.4837 | -76.52274 | 1000 |
7 | 3.48356 | -76.52237 | 999 |
8 | 3.48347 | -76.5221 | 998 |
9 | 3.48337 | -76.52183 | 997 |
10 | 3.48317 | -76.52128 | 996 |
11 | 3.48302 | -76.52133 | 996 |
12 | 3.482 | -76.5217 | 998 |
13 | 3.48128 | -76.52194 | 998 |
14 | 3.48073 | -76.52216 | 998 |
15 | 3.48056 | -76.52221 | 998 |
16 | 3.48038 | -76.5219 | 998 |
17 | 3.4802 | -76.52137 | 996 |
18 | 3.48003 | -76.5209 | 996 |
19 | 3.47987 | -76.52039 | 995 |
20 | 3.47969 | -76.51994 | 994 |
21 | 3.47963 | -76.51982 | 994 |
22 | 3.47959 | -76.51971 | 994 |
23 | 3.47944 | -76.51945 | 994 |
24 | 3.47926 | -76.51918 | 994 |
25 | 3.47907 | -76.51887 | 994 |
26 | 3.47872 | -76.5183 | 993 |
27 | 3.478512 | -76.517966 | 993 |
https://github.com/heremaps/flexible-polyline/tree/master/java 上的解码器工作正常,请参阅使用您的编码字符串编码:
private void testSOLatLngDecoding() {
List<LatLngZ> computed = decode("B2Fkt10Grm4-xE8yTU4mBnBnG8pBAzP0tBAjD4IA_E8LAvMokBT3IkXTzF8QTnG8QTvMsiBTrJjDA3_BjXoB_sB_OAriB3NAzKjDAnLsTAnLkhBnBzKsdA_J8fTnLkcT3DwHAvC8GArJoQAnL8QA7LsTA7V0jBT_M8UA");
List<String> seqCrds = new ArrayList<>();
for (int i = 0; i < computed.size(); ++i) {
LatLngZ c = computed.get(i);
List<String> crds = new ArrayList<>();
crds.add(String.valueOf(c.lat));
crds.add(String.valueOf(c.lng));
crds.add(String.valueOf(c.z));
seqCrds.add(String.join(",", crds));
//assertEquals(computed.get(i), pairs.get(i));
}
System.out.println(String.join(",", seqCrds));
}
我们在 https://demo.support.here.com/examples/v3.1/enc_dec_flexible_polyline
上有一个 javascript 工具“Encode/Decode to/from 灵活多段线”请看结果:
请仔细检查您这边的代码。