背景
之前因為下載影像接觸到Google Earth Engine,我還是挺有興趣的,后來看知乎專欄,有人說GEE能與QGIS結合了,我就嘗嘗鮮(其實挺早就出了,已經不鮮了)。本文章不再贅述插件安裝的步驟了,直接處理問題,文章末尾放插件安裝步驟的網址。
問題
寫這篇文章的目的,肯定是因為遇到了很多問題。
問題1:裝插件時出現這個問題,裝到最后彈出錯誤,提示Plugin installation failed:Operation canceled. 看這個錯誤提示看起來像是人為點擊取消的,實際上軟件安裝過程中自動取消的。
問題2:Couldn't load plugin 'ee_plugin' due to an error when calling its classFactory() method(無法載入插件 “qgis-earthengine-plugin-master”因在調用其classFactory()方法時發生錯誤)
問題3:TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。
問題4:qgis.utils.plugins['ee_plugin'].check_version() KeyError:'ee_plugin'
原因分析
這幾個問題,前三個問題都是跟網絡相關,畢竟GEE本來就需要scientific Internet,所以在QIS里面也需要外網支持才能行。
第四個問題大概率跟QGIS插件字典有關,也可能插件本身不穩定的原因。
解決方案
問題好多,困擾了我好久,挺郁悶人的,今天終於解決了。
前三個問題都跟網絡有關,就要自己搞個代理,然后在QGIS設置代理:
①先關閉防火牆,然后打開QGIS,設置→選項→網絡,具體根據自己電腦的代理設置
這樣基本就就解決掉第一個插件下載不了和第二個加載不了插件的問題了,在解決這個問題時發現QGIS的插件可以直接到官網下載,然后安裝時選擇用ZIP安裝
②問題三TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。這個問題也是找了好久,后來在多個地方找到解決方案,要在代碼里設置代理,端口號根據自己的電腦設置

1 import ee 2 import os 3 os.environ['HTTP_PROXY'] = 'http://127.0.0.1:1081' 4 os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:1081' 5 ee.Initialize()
③問題四花費的時間最長,因為環境都配置好了,但是測試代碼都完全可以運行了,但是加載影像的代碼就是會報錯“qgis.utils.plugins['ee_plugin'].check_version() KeyError:'ee_plugin'”,比較莫名其妙,這個地方要去插件管理里面關閉插件重新啟用
在github的issue找到的,其實之前也試過這方法,試了GEE插件開發者給的解決方法沒起作用,但是題主說解決了,就去找題主,沒有聯系上,我今天突發奇想,就覺得這個題主這么可能在沒有別人幫助的情況下解決的,因為我本人費了好幾天都沒解決掉,我想肯定是開發者給的解決方法是有效的,所以今天下午重新試了下,果然有用。
用了示例代碼(一個不錯的例子集合):

1 import ee 2 from ee_plugin import Map 3 import os 4 os.environ['HTTP_PROXY'] = 'http://127.0.0.1:1081' 5 os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:1081' 6 ee.Initialize() 7 8 # get a single feature 9 countries = ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017") 10 country = countries.filter(ee.Filter.eq('country_na', 'Ukraine')) 11 Map.addLayer(country, { 'color': 'orange' }, 'feature collection layer') 12 13 # TEST: center feature on a map 14 Map.centerObject(country, 6)
效果如下:
總結
最重要的是要上外網,然后再QGIS的網絡里配置,在代碼里也要有相應的配置。
參考網址
好消息!基於QGIS的Google Earth Engine插件已發布
qgis-earthengine-plugin cannot be use