是否可以调用Google API获取地图图像并将图像保存在某个位置
Is it possible to call a Google API and get the map image and save the image in somewhere
我目前正在用html电子邮件发送谷歌地图图像。
目前我正在使用静态地图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得到折线,用我从调用方向API得到的折线,我将调用静态映射API。
我的问题是
当路点数增加(通常超过5个)时,折线会变得很大,URL也会变长,如果超过2048个字符,我就无法查看地图。谷歌没有将其识别为有效的URL。所以这是显而易见的。
我的问题
- 有没有办法缩小策略行的大小
- 有没有办法调用Google API并获取图像并将其保存在我的服务器中
- 如果我能做到第二点,在我的服务器中保存谷歌地图,而不是每次我想要的时候都调用谷歌服务器来获取图像,这是违法的吗
- 我还有其他方法可以完成任务吗
我陷入这个问题已经两个多星期了。我几乎什么都试过了。请帮我解决这个问题。
提前谢谢。
我将在线回答您:
-
有没有办法缩小折线的尺寸
是,Google使用编码多段线,您可以在这里找到它们的创建过程。您还可以找到交互式多段线编码器实用程序,还可以考虑使用谷歌的名为Geometry的库及其方法encodePath()
。在此处查找参考资料 -
是否可以调用Google API并获取图像并将其保存在我的服务器中
否,如xomena 所述 -
如果我能做到第二点,在我的服务器中保存谷歌地图,而不是每次我想要的时候都调用谷歌服务器来获取图像,这是违法的吗
否,如xomena 所述 -
我还有其他方法可以完成任务吗
是,正如我在回答您的第一个问题时所说,您可以使用谷歌的几何库
我将回答我自己的问题-仅针对第1部分,
减少多段线大小的一种方法是使用多段线编码。要了解它的工作原理,您可以使用这个交互式示例
对于node.js,我使用了简化路径和折线模块来实现这一点。
步骤
- 使用您的纵向数据调用方向API,并获得概览多段线
- 使用
polyline
模块解码策略行 - 使用CCD_ 4模块简化路径
- 最后使用
polyline
模块中的encode对从第三步获得的细节进行编码
示例
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
回答问题2和问题3。无法在服务器上保存图像。这是服务条款所禁止的。
参见ToS 第10.1(a)段
除非通过服务,否则无法访问API或内容。除非通过服务,否则您将无法访问地图API或内容。例如,您不得通过API地图以外的界面或渠道(包括未记录的Google界面)访问地图分幅或图像。
https://developers.google.com/maps/terms#10-许可证限制
解决问题3:否(如xomena之前所述)
以下是相关服务条款的更新:
3.2.3对滥用服务的限制。
(a) 禁止刮擦。客户不会导出、提取或以其他方式抓取谷歌地图内容以供服务之外使用。例如,客户不会:(i)在服务之外预取、索引、存储、重新共享或重新托管谷歌地图内容;(ii)批量下载谷歌地图瓦片、街景图像、地理编码、方向、距离矩阵结果、道路信息、地点信息、高程值和时区详细信息;(iii)复制并保存企业名称、地址或用户评论;或(iv)将谷歌地图内容与文本到语音服务结合使用。
(b) 无缓存。除非地图服务特定条款明确允许,否则客户不会缓存谷歌地图内容。
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- 将多个重叠的透明图像保存为一个图像
- 将图像保存到安卓系统中的SD卡
- 将图像保存到硬盘驱动器
- 在将图像保存到服务器之前检查图像大小
- 使用Cordova contacts插件将图像保存到用户的联系人中
- 如何使用纯javascript或jQuery将HTML5画布屏幕作为png图像保存到项目的特定文件夹中
- 是否可以调用Google API获取地图图像并将图像保存在某个位置
- 将图像保存到用户的pc缓存中,并使用asp.net从缓存中使用它
- 谷歌图表将缩放的图像保存为PNG
- 将上传的图像保存在本地位置
- 如何将图像保存为基数 64
- 将上传的图像保存到本地存储(chrome 扩展程序)
- 无法将完整画布图像保存到服务器
- 如何将画布图像保存在磁盘中
- React Native 将 http 图像保存到 Android 相机胶卷
- 使用Phonegap将图像保存到Iphone照片库
- 将图像保存到Webkit和Gecko中的blob
- Javascript和FF-addon:如何在不重新下载的情况下将图像保存到本地磁盘
- 将本地计算机上的相机捕获的图像保存在文件夹中