Mapbox API 请求静态地图和折线

Mapbox API requests for Static Map and Polyline

我正在改写我之前提出的问题,希望它能给我一些反馈。

我需要从 Mapbox 生成静态地图,显示两个端点和它们之间的多段线路线。下面概述的方法是我正在使用的方法。它有时有效,有时无效——这让我抓狂。

首先,我使用两个 GPS 端点发出生成折线的 API 请求。然后我使用带有两个端点和多段线的第二个 API 请求来生成静态地图。第一部分似乎总是有效。我得到了一条编码折线,我可以通过在线解码工具 运行 它很好地显示了路径上的各个点,但是从 Mapbox 生成地图的第二步有时会给我预期的地图,有时会给我一个错误代码。代码通常是 {"message":"Not Found"},但有时我会收到 {"message":"Not Authorized - No Token"} 错误代码。

我将此 API 与两个端点一起使用以获得具有折线的 JSON 文件: https://api.mapbox.com/directions/v5/mapbox/driving/POINT1;POINT2?access_token=TOKEN

然后,一旦我有了折线,我就使用这个 API 来生成地图:

https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/pin-s-a+9ed4bd(POINT1),pin-s-b+000(POINT2),path-5+f44-0.5(POLYLINE)/auto/500x300?access_token=TOKEN

这很好用...

点 1 = -87.321536,36.584454

点 2 = -104.793676,38.749513

折线 = }kh~Ez{}sO|HUuHmj@uhHbOyAla@kisAdelC|aMf~w@egO|uaAahfBr{|@w_@sAozkCcwFsp@v]__w@hjFjf@bdCkaJhmzAiyXtzb@fJ|{@{p[|~yErtBdacE{x^vkvHrZfuKo[tpBfxSrcuBocGpi_AqhCvjb@wgAvfsDhyc@fkrD~mD~bkDayD~ywCsui@vjmEoyBpk|AiOhHrvEdueApda@huoA|v[zuhFsySvwaAvbDwqHxXpwDYj@ riJULheEfXh^tdAj~I^gIhAkEY~@kHseBlGyC^kA

映射API请求=https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/pin-s-a+9ed4bd(-87.321536,36.584454),pin-s-b+000(-104.793676,38.749513),path-5+f44-0.5(}kh~Ez{}sO|HUuHmj@uhHbOyAla@kisAdelC|aMf~w@egO|uaAahfBr{|@w_@sAozkCcwFsp@v]__w@`hjFjf@bdCkaJhmzAiyXtzb@fJ|{@{p[|~yErtBdacE{x^vkvHrZfuKo[tpBfxSrcuBocGpi_AqhCvjb@wgAvfsDhyc@fkrD~mD~bkDayD~ywCsui@vjmEoyBpk|AiOhHrvEdueApda@huoA|v[zuhFsySvwaAvbD`wqHxXpwDYj@riJULheEfXh^tdAj~I`^gI`hAkEY~@kHseBlGyC^kA)/auto/500x300?access_token=TOKEN

地图(耶!)

这行不通...

点 1 = -87.321536,36.584454

点 2 = -85.855218,37.690038

折线 = }kh~Ez{}sO|HUtCurC}xCkhC}~BqvIuc_@o~l@oaI}aUrs@kkL}~Iso\qHoyGsiKaTpQcRdlGusK_DEiz@w^cwOakJurAizT{hCugF_bBenSsOclZkdCw]mgEwyDogLgfBatEubCmkGxa@icLe_Do_Spf@cw]}sEgOaDgT{[zFyIk~Bts@

映射API请求=https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/pin-s-a+9ed4bd(-87.321536,36.584454),pin-s-b+000(-85.855218,37.690038),path-5+f44-0.5(}kh~Ez{}sO|HUtCurC}xCkhC}~BqvIuc_@o~l@oaI}aUrs@kkL}~Iso\qHoyGsiKa`TpQcRdlGusK_DEiz@w^cwOakJurAizT{hCugF_bBenSs`OclZkdCw]mgEwyDogLgfBatEubCmkGxa@icLe_Do_Spf@cw]}sEgOaDgT{[zFyIk~Bts@)/auto/500x300?access_token=TOKEN

没有地图:-(

这是一个更大项目的一小部分,我在其中自动化生成项目报告的过程,但问题不在于我的 jQuery/AJAX 代码。我的 APIs and/or Mapbox 有问题。如果有 better/faster/easier 获取这些地图的方法,那么我绝对愿意接受建议,因为这似乎不是最有效的方法。我将从计算机生成这些报告。我不担心 phone 应用程序的带宽或按比例缩小。文件可以有多繁琐只要我每次都能始终如一地生成地图。

史蒂夫的评论暗示了正确的解决方案,但只是为了绝对清楚 - 发生这种情况是因为您没有正确编码请求中的路径折线。 Polylines 尤其有一个讨厌的习惯,它包含会破坏 URI 的保留字符,除非在请求时正确编码。

当我使用像 url encode decode, I'm able to make your request work as expected:

这样的简单工具对路径叠加层的多段线部分进行编码时
https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/pin-s-a+9ed4bd(-87.321536,36.584454),pin-s-b+000(-85.855218,37.690038),path-5+f44-0.5(%7Dkh~Ez%7B%7DsO%7CHUtCurC%7DxCkhC%7D~BqvIuc_%40o~l%40oaI%7DaUrs%40kkL%7D~Iso%2FqHoyGsiKa%60TpQcRdlGusK_DEiz%40w%5EcwOakJurAizT%7BhCugF_bBenSs%60OclZkdCw%5DmgEwyDogLgfBatEubCmkGxa%40icLe_Do_Spf%40cw%5D%7DsEgOaDgT%7B%5BzFyIk~Bts%40)/auto/500x300?access_token=MAPBOX_ACCESS_TOKEN

⚠️ 免责声明:我目前在 Mapbox 工作 ⚠️