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

时间:2016-04-01 02:25:05

标签: javascript node.js google-maps google-static-maps google-direction

我目前正致力于在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之前,我会调用directions-api 使用lat long获取折线,使用polyline从调用方向API获取我将调用静态地图API。

我的问题是

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

我的问题

  1. 无论如何都要减少ploy线的大小?
  2. 无论如何都要调用Google API并获取图片并将其保存在我的服务器中。
  3. 如果我可以做第二点,在我的服务器中保存谷歌地图是违法的,而不是每次我想要调用谷歌服务器获取图像。
  4. 还有其他方法可以完成我的任务。
  5. 我现在被困在这个问题上超过2个星期了。我几乎尝试了一切。请帮我解决这个问题。

    提前谢谢。

3 个答案:

答案 0 :(得分:3)

我会在线回答你:

  1. 无论如何都要缩小多边形线的尺寸吗?
    ,Google使用编码折线,here您可以找到创建它们的过程。您还可以找到Interactive Polyline Encoder Utility,还可以考虑使用名为Geometry的Google库及其方法encodePath()。查找参考here
  2. 无论如何都要调用Google API并获取图片并将其保存在我的服务器中。
    ,如xomena

  3. 所述
  4. 如果我可以做第二点,在我的服务器中保存谷歌地图是不合法的,而不是每次我想要调用谷歌服务器获取图像?
    ,如xomena

  5. 所述
  6. 还有其他方法可以完成我的任务。
    ,正如我对您的第一个问题的回答所述,您可以使用Google's Geometry library

答案 1 :(得分:2)

我将回答我自己的问题 - 仅针对第1部分

缩小折线尺寸的方法是使用polyline encoding。 要查看其工作原理,您可以使用this interactive sample

对于node.js,我使用simplify-pathpolyline模块来实现这一点。

<强> STEPS

  1. 使用您的lat long数据计算Directions API并获取概述折线
  2. 使用polyline模块
  3. 解码ploy行
  4. 使用simplify-path模块简化路径。
  5. 最后使用polyline模块中的编码
  6. 对第3步中获得的详细信息进行编码

    示例

    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));
    

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

    似乎很简单:D

答案 2 :(得分:2)

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

查看ToS的第10.1(a)段

  

除通过服务外,无法访问API或内容。除非通过服务,否则您不会访问Maps API或内容。例如,您不得通过Maps API之外的接口或通道(包括未记录的Google界面)访问地图图块或图像。

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