Sentinel數據處理工具包SNAP Python開發環境搭建


版權聲明:本文爲博主原創文章,轉載請註明原文出處!

寫作時間:2020年12月4日週末


Sentinel數據處理工具包SNAP Python開發環境搭建

這篇博文主要探索安裝SNAP工具包並且使用Python接口進行開發過程中搭建開發環境所踩的坑。不得不說歐空局SANP官方提供的資料太少,而且不全面。當然有問題你可以去Forum提問,可是回不回答就是另外一回事了!

下面言歸正傳說說如何搭建SNAP Python開發環境用於處理Sentinel衛星數據吧!(這篇文章主要談開發環境搭建,具體數據處理可以關注後續博文。)

安裝思路是:首先從SNAP官網安裝提供的二進制包(截至目前最新版本是7.0.0),然後再進行相應的配置即可。對於二進制包的安裝沒什麼可說的,可是環境的配置到處是坑,按照官網的教程根本不可能走通的。

下面主要談一下具體如何處理這些問題。

安裝問題

官網提供了兩種形式的Python環境配置(參見Configure Python to use the SNAP-Python (snappy) interface):第一,在安裝二進制包過程中可以選擇Python安裝目錄,SANP安裝包自動幫你設置;第二,安裝好以後,自己手動進行設置。

我剛開始是選擇第二種方式進行的,第二種方式需要手動編譯安裝Python接口,但是我從來沒有編譯成功過。(錯誤提示:AttributeError: ‘list’ object has no attribute ‘join’,然而根本不知道該怎麼解決,論壇中也有人遇到這樣的錯誤)

所以我就刪掉了裝好的SNAP包,重新安裝。在安裝過程中選擇自己提前安裝好的Python路徑。我是使用Conda提前安裝了一個3.6版本的Python環境(conda create -n snap python=3.6)。在安裝SNAP過程中根據安裝嚮導進行設置即可。

注意:SNAP安裝過程中安裝嚮導提示要求Python是2.7,3.3或者3.4版本(官方教程中說是支持2.7,3.3或者3.6版本,不知道哪個是對的)。

安裝即算完成了。然後根據官方的教程進行測試,首先切換目錄到SNAP Python接口snappy所在目錄,macOS下在~/.snap/snap-python,不同操作系統在用戶目錄下的.snap文件夾中找即可。然後在控制檯調用我們剛纔安裝SNAP過程中設置的Python命令。如果我們是使用Conda安裝的Python,直接conda activate snap即可。

cd <cd <snappy-dir>
<python-exe>

snap-python目錄,我們可以使用如下代碼進行測試Python開發接口是否正常工作。

from snappy import ProductIO
p = ProductIO.readProduct('snappy/testdata/MER_FRS_L1B_SUBSET.dim')
list(p.getBandNames())

然而,測試過程中你會發現有很多問題,而官方教程中根本沒提供解決方案。下面細細說一下我遇到的問題以及解決方案。

缺包問題

運行以後的錯誤提示如下:ImportError: No module named jpyutil,這顯然是Python找不到包的緣故。那沒有的話,我們安裝一個即可(需要安裝JPY包,一個用於Java和Python語言直接相互調用的橋接庫)。

安裝過程中,我直接使用pip install jpy進行安裝,結果又有新的錯誤。

後來,我發現JPY的GitHub網站上提供了編譯好的二進制安裝包,根據自己的的平臺和Python版本選擇合適的WHL二進制文件下載,下載以後直接使用pip install <jpy.whl>命令安裝即可(jpy.whl換成你自己下載好的文件路徑)。

JDK版本問題

缺包問題解決以後,繼續進行測試,結果提示找不到JDK的動態鏈接庫,根據錯誤提示,我發現snappy查找的Python版本跟我係統設置的JAVA_HOME路徑中的JDK不一致。可能程序中使用了自己定義好JDK版本(1.8.0_112),而沒有選擇使用環境變量中提供的版本。

所以我根據錯誤提示我下載了1.8.0_112版本的JDK二進制包進行安裝,JDK的問題就算解決了。

Java JDK官方網站提供的一般是最新的版本,要下載老舊的JDK可以通過網站Oracle Java Archive選擇自己的操作系統平臺進行二進制包的下載安裝,不要忘了提前申請一個Oracle的賬號。

環境變量問題

JDK版本問題解決以後,繼續進行測試。結果又提示找不到SANP_HOME路徑,我們在環境變量中設置SANP_HOME變量指向到SNAP的安裝目錄即可。Windows下可以通過This PC屬性進行設置,Linux可以在~/.bashrc文件中進行設置,macOS在~/.bash_profile進行設置。我的設置如下:

export SNAP_HOME=/Applications/snap

最後,我們再繼續進行測試,終於看到輸出結果了:

['radiance_1', 'radiance_2', 'radiance_3', 'radiance_4', 'radiance_5', 'radiance_6', 'radiance_7', 'radiance_8', 'radiance_9', 'radiance_10', 'radiance_11', 'radiance_12', 'radiance_13', 'radiance_14', 'radiance_15', 'l1_flags', 'detector_index']

關於snappy接口的具體使用,歡迎關注我的後續文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章