1

我目前正致力於在html電子郵件中發送google地圖圖像。是否可以調用Google API並獲取地圖圖像並將圖像保存在某個地方

目前我使用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:[email protected]?HGLMX?VV`[email protected]|[email protected]@[email protected]`[email protected]`[email protected]@[email protected]`[email protected]@[email protected]|[email protected]@[email protected]~B{[email protected]@[A[[email protected]@[email protected][email protected]@[email protected][[email protected]?}A][email protected]@|A\J?JOIsCJgC?[[email protected]^[email protected]`[email protected]@[email protected]@[email protected]@DHDN?TC`@IFW^[email protected][[email protected]@[email protected]|@`@[email protected]{D~J}[email protected]@[email protected]`@Q^[email protected]{[email protected]@}[email protected]?LlCH~DI_EMmCH?|@BdA?lA?nCBfADlAFrDHnEH|ELtIRjAB|[email protected]`[email protected]@[email protected]@[email protected]@}[email protected]~AcE`[email protected]@[email protected]\mC|@[email protected]]XkAZuBX}[email protected]@[email protected]`[email protected][email protected]@[email protected][email protected][email protected]@[email protected]|GrB`I`CYnA_BpH{A`H&key=MY_API_KEY=400x400" > 

調用靜態地圖API之前,我會打電話給directions-api 與緯度長,並獲得折線,折線與我從呼叫方向API,我將調用靜態地圖API得到。

我的問題是

當航點數量的增加(超過5常)折線變得非常大,URL將變長,如果大於2048個字符,我無法查看我的地圖。谷歌不會將其標識爲有效的網址。所以很明顯。

我的問題是

  1. 反正是有減少的伎倆行的大小?
  2. 無論如何要調用Google API並獲取圖像並將其保存在我的服務器中。
  3. 如果我可以做第二點,在我的服務器中保存谷歌地圖是非法的,而不是每次需要時調用google服務器來獲取圖像。
  4. 有沒有其他方法可以完成我的任務。

我被困在這個問題超過2個星期了。我幾乎嘗試了一切。請幫我解決這個問題。

預先感謝您。

回答

2

我會回答我的問題 - 只爲部分1

,以減少大小的一種方式的折線是使用polyline encoding。 看看它是如何運作的,你可以使用this interactive sample

對於我用simplify-pathpolyline模塊來實現這個Node.js的。

STEPS

  1. CAL的Directions API與Lat Long網的數據,並獲得概述折線
  2. 解碼使用polyline模塊
  3. 簡化使用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

+0

的可能性我會感到驚訝,如果你使用從路線'overview_polyline'時仍然需要這點,那你在用什麼?那個已經簡化了。 – miguev

2

解決問題2和3,您無法保存您的服務器上的圖像。它受到服務條款的禁止。服務條款

不能訪問API或內容除了通過服務的

請看第10.1款(a)所示。除通過服務之外,您不會訪問Maps API或內容。例如,您不能通過地圖API以外的接口或渠道(包括未公開的Google界面)訪問地圖圖塊或圖像。

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

+0

然而,在同一部分(10.5)中:>您不會預先獲取,緩存,索引或存儲要在服務之外使用的任何內容,但您可以僅爲了提高性能而存儲有限量的內容由於網絡延遲導致您的Maps API實施... – XstiX

3

我會在線回答你:

  1. 反正是有減少多線的大小?
    是的,谷歌使用編碼多段線,和here你可以找到它們如何被創建的過程。你也可以找到一個Interactive Polyline Encoder Utility,你也可以考慮使用谷歌的圖書館Geometry及其方法encodePath()。查找參考here
  2. 有沒有辦法調用Google API並獲取圖像並將其保存在我的服務器中。
    沒有,如前所述通過xomena

  3. 如果我能做到第二點,是非法的,保存在我的服務器谷歌地圖,而不是調用谷歌的服務器我不想每次都獲得圖像?
    沒有,由xomena

  4. 指出是否有任何其他的方式,我可以實現我的任務。
    ,作爲我的回答陳述你的第一個問題,你必須使用Google's Geometry library
相關問題