是否可以调用Google API并获取地图图像并将图像保存在某个地方

我目前正在发送一个HTML电子邮件的谷歌地图图像。

目前我正在使用static-maps-api来实现我的任务。 我将调用静态地图API并将图像URL设置为src在图像标记中。

 <img src="https://maps.googleapis.com/maps/api/staticmap?markers=icon:http://mailadapterdev.vanapi.com/static/start.png|13.82,100.54&markers=icon:http://mailadapterdev.vanapi.com/static/waypt1.png|13.80,100.54&markers=icon:http://mailadapterdev.vanapi.com/static/waypt2.png|13.81,100.52&markers=icon:http://mailadapterdev.vanapi.com/static/waypt3.png|13.79,100.54&markers=icon:http://mailadapterdev.vanapi.com/static/dest.png|13.79,100.53&path=weight:3|color:blue|enc:cfjsAqvsdRnAMd@MZpDLpATpB?HGLMX?VV`CTjBr@L|ATlDf@hBXGl@CPTDtAR~Et@jF`AnLbBvKdB~@JbAR`BTdDd@pDj@l@H`Cb@vALFOJIr@yCxAgHPYTOREV?N@ZHrIxD|HjD~CxAxAn@j@XHDZy@hAoCdCiG~B{Gj@gBXeALWNU@[A[OWi@m@_@_@i@w@O[o@SSKK?}A]sBy@wBeAvBdArBx@|A\J?JOIsCJgC?[Io@KQ^Nn@TLDUfDC`AFp@RfAj@dAl@p@n@n@DHDN?TC`@IFW^MVYdAKZMb@uBdGaDfIiAnC[x@B@RHpCnAnAh@jChAnVrK|@`@Uh@iChG{D~J}B~Fe@tAq@fCcBfG_ApDMd@AXO`@Q^GCu@S{AAyIByEAaABc@@}A@kACeDImKWcKSmAGgAEoCCqECI?LlCH~DI_EMmCH?|@BdA?lA?nCBfADlAFrDHnEH|ELtIRjAB|AAb@A`ACxE@xICzA@l@Oh@a@p@}BhDoMd@yA~AcE`AiCtDsJhCeGHSHs@b@_Ej@cGbAuJ\mC|@sGb@gENoBF]XkAZuBX}CLoA@CbAJbDXl@Fm@GcDYcAKABMnAOzAI`AKr@_@pBQx@OnBUdCYbCk@tDCR~@VTL~@t@xBz@|GrB`I`CYnA_BpH{A`H&key=MY_API_KEY=400x400" > 

在调用静态地图api之前,我会调用lat的方向api ,并获得多段线,我从调用方向API得到的多段线,我将调用静态地图API。

我的问题是

当路点数量增加(通常超过5个)时,折线变得非常大,并且URL将变长,如果它大于2048个字符,我不能查看我的地图。 谷歌不会将其标识为有效的url。 所以很明显。

我的问题是

  1. 无论如何要减less对外线的大小?
  2. 无论如何要调用Google API并获取图像并将其保存在我的服务器中。
  3. 如果我可以做第二点,是不是在我的服务器上保存谷歌地图是非法的,而不是每次我想要调用谷歌服务器来获取图像。
  4. 有没有其他方法可以完成我的任务?

我被困在这个问题超过2个星期了。 我几乎尝试了一切。 请帮我解决这个问题。

先谢谢你。

我会在线回答你:

  1. 是否有减less多线的大小?
    是的 ,Google使用编码多段线, 在这里您可以find创build过程。 您也可以find一个交互式折线编码器实用程序 ,您也可以考虑使用Google的库,称为几何和它的方法encodePath() 。 在这里find参考。
  2. 无论如何要调用Google API并获取图像并将其保存在我的服务器中。
    ,如xomena所述

  3. 如果我可以做第二点,在我的服务器上保存谷歌地图是不合法的,而不是每次打电话到谷歌服务器来获取图像?
    ,如xomena所述

  4. 有没有其他方法可以完成我的任务?
    是的 ,正如我在回答您的第一个问题时指出的那样,您可以使用Google的几何图书馆

解决问题2和3.您无法在服务器上保存图像。 这是服务条款所禁止的。

看看ToS的10.1(a)段

除通过服务之外,不能访问API或内容。 除了通过服务之外,您不会访问Maps API或内容。 例如,您不能通过地图API以外的接口或渠道(包括未公开的Google界面)访问地图图块或图像。

https://developers.google.com/maps/terms#10-license-restrictions

我会回答我自己的问题 – 只是第一部分

减less折线大小的一种方法是使用折线编码 。 要看它是如何工作的,你可以使用这个交互式示例

对于node.js,我使用了简化path和折线模块来实现这一点。

脚步

  1. 使用纬度长的数据调用Directions API并获取概览折线
  2. 使用polyline模块解码multithreading
  3. 使用simplify-path模块simplify-path
  4. 最后使用polyline模块中的编码对从第三步得到的细节进行编码

 var simplify_path = require("simplify-path"); var polyline = require("polyline"); var poly_line = "overview polyline from directions API"; var path = polyline.decode(poly_line); var tolerance = 10; path = simplify_path(path, tolerance) var new_polyline = polyline.encode(path); console.log("old_plyline "+JSON.stringify(poly_line)); console.log("new_polyline "+JSON.stringify(new_polyline)); 

所以你会得到一个简化的相对较短的工作线。

看起来很简单:D