通过 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 的解码:

结果是一样的

所以,问题似乎出在这里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 灵活多段线”

请看结果:

请仔细检查您这边的代码。