2014-11-04 70 views
-1

我需要使用一些谷歌航拍圖片進行圖像處理,而且由於我需要很多圖片,所以很難手動對這些圖片進行手動屏幕截圖,所以我想知道是否有一種方法可以自動導出衛星給定地理位置的圖像。如何自動將Google衛星地圖導出/提取到圖像上?

我使用node.js,它似乎殭屍和phantom.js是模擬人類瀏覽器的方法,它有可能從瀏覽器中檢索HTML,但可以通過渲染google map html方法讓我做截圖。

+0

你確定這不違反本服務條款? – 2014-11-04 17:18:26

+0

我的問題是關於可能性,只是爲了簡化我在空間圖像上進行圖像處理實驗的工作。不用於商業用途。無論如何 – user824624 2014-11-04 18:31:24

+0

我的回答有幫助嗎?有什麼問題嗎? – 2014-11-20 13:53:30

回答

0

是的,用普通的PhantomJS就可以輕鬆完成。你也可以爲此使用ZombieJS或CasperJS。它們使處理很多步驟變得更簡單,而不會遇到回調地獄或靜態代碼。

我添加了用於點擊和鍵入的必要功能。設置用戶代理字符串是必要的,因爲否則Google將提供可能無法在(舊)PhantomJS 1.x引擎上運行的代碼。

var page = require('webpage').create(), 
    classical = true; 

// This userAgent works good with GM 
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1'; 
page.viewportSize = { 
    width: 1280, 
    height: 800 
}; 

function click(selector){ 
    page.evaluate(function(selector){ 
     // taken from here: http://stackoverflow.com/a/15948355 
     var ev = document.createEvent("MouseEvent"); 
     ev.initMouseEvent(
      "click", 
      true /* bubble */, true /* cancelable */, 
      window, null, 
      0, 0, 0, 0, /* coordinates */ 
      false, false, false, false, /* modifier keys */ 
      0 /*left*/, null 
     ); 
     document.querySelector(selector).dispatchEvent(ev); 
    }, selector); 
} 

function type(text){ 
    page.evaluate(function(text, classical){ 
     var el = document.querySelector(classical ? "#gbqfq" : "#searchboxinput"); 
     el.value = text; 
     el.focus(); 
    }, text, classical); 
    page.sendEvent('keypress', page.event.key.Enter); 
} 

page.open("https://www.google.com/maps", function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
     phantom.exit(); 
    } else { 
     if (classical) { 
      click("#paneltoggle2"); 
     } 
     setTimeout(function(){ 
      page.render("1.png"); 
      click(classical ? "#mv-primary-container > .mv-primary" : "button.widget-minimap-shim"); 
     }, 1000); // +1 sec 
     setTimeout(function(){ 
      page.render("2.png"); 
      type("bern"); 
     }, 11000); //+10 sec 
     setTimeout(function(){ 
      if (classical) { 
       click("#paneltoggle2"); 
      } 
     }, 16000); //+5 sec 
     setTimeout(function(){ 
      page.render("3.png"); 
      phantom.exit(); 
     }, 21000); //+5 sec 
    } 
}); 

如果您使用PhantomJS版本< 1.9.8,你應該--ssl-protocol=tlsv1運行它。裁剪圖像也許會有所幫助,因此使用clipRect時控件不可見。

相關問題