[GIS] 用外部 Python 2 執行 QGIS Python 工具

最近同學丟了一個問題給我,說 QGIS 中合併網格資料(Raster)的功能失效,錯誤訊息是「The process crashed some time after starting successfully.」,雖然不知道是怎麼回事,不過我裝了非 QGIS 的 Python 來跑跑看相關程式。

系統需求

  • pyGDAL (Windows 中 QGIS 發佈版內建,請至安裝目錄找找)
  • Anaconda (Python 發佈版之一,方便管理套件或許多 Python 環境、版本)

步驟

安裝 Python 2 環境:

  1. 開啟 cmd.exe 或 Terminal.app。
  2. 輸入以下命令,並按「y」安裝:
    conda create --name py2 python=2 numpy
    
    Package plan for installation in environment C:\~\AppData\Local\conda\conda\envs\py2:
    
    The following NEW packages will be INSTALLED:
    
        mkl:            2017.0.1-0
        numpy:          1.13.0-py27_0
        pip:            9.0.1-py27_1
        python:         2.7.13-1
        setuptools:     27.2.0-py27_1
        vs2008_runtime: 9.00.30729.5054-0
        wheel:          0.29.0-py27_0
    
    Proceed ([y]/n)? y
    
    ...
    
    #
    # To activate this environment, use:
    # > activate py2
    #
    # To deactivate this environment, use:
    # > deactivate py2
    #
    # * for power-users using bash, you must source
    #

    指令說明:

    1. conda create : 創立一個新的 Python 環境
    2. –name py2 :替新的環境命名,本例是 py2。
    3. numpy : 要安裝的套件。 GDAL 的預先需求為 numpy ,故於此同時安裝。
  3. 啟動 py2 環境:
    activate py2

    此時命令提示字元前方會多一個括號,如:

    (py2) C:\>
  4. 安裝 pygdal :
    (py2) C:\>conda install gdal

    他會幫你安裝所需的套件,並跟你確認,輸入 「y」確定:

    The following NEW packages will be INSTALLED:
    
        curl:      7.52.1-vc9_0   [vc9]
        gdal:      2.1.0-py27_0
        geos:      3.5.0-vc9_0    [vc9]
        hdf4:      4.2.12-vc9_1   [vc9]
        hdf5:      1.8.15.1-vc9_4 [vc9]
        jpeg:      9b-vc9_0       [vc9]
        kealib:    1.4.6-vc9_0    [vc9]
        libgdal:   2.1.0-vc9_0    [vc9]
        libnetcdf: 4.3.3.1-vc9_4  [vc9]
        libtiff:   4.0.6-vc9_3    [vc9]
        proj4:     4.9.2-vc9_0    [vc9]
        xerces-c:  3.1.4-vc9_0    [vc9]
        zlib:      1.2.8-vc9_3    [vc9]
    
    Proceed ([y]/n)? y

    完成後即可使用 GDAL。

執行 Merge Raster 工具程式

  1. 找到 gdal_merge.py 的檔案(Windows 在 QGIS 安裝目錄下,例如:「C:\Program Files\QGIS 2.18\bin\gdal_merge.py 」)
  2. 使用 QGIS  Merge 的對話框(Raster > Miscellaneous > Merge)準備好相關指令(輸入的網格資料、輸出格式等等),按下對話框底部的小鉛筆編輯,並複製所有指令。如:(註:行末反斜線(\)為方便在網頁閱讀使用,實際上不會有!)
    (py2) C:\> gdal_merge.bat \
    -n -32768 \
    -a_nodata -32768 \
    -of GTiff -o D:\hungary.tif  \
    D:\hungary_band.tif D:\Hungary_left.tif D:\Hungary_middle.tif  D:\Hungary_right.tif
  3. 將「gdal_merge.bat」換成「 python gdal_merge.py  」,後面接上原本的指令:
    (py2) C:\> python gdal_merge.py \
    -n -32768 \
    -a_nodata -32768 \
    -of GTiff -o D:\hungary.tif  \
    D:\hungary_band.tif D:\Hungary_left.tif D:\Hungary_middle.tif  D:\Hungary_right.tif
  4. 執行結束就可以了!

後記

QGIS 雖然顯示錯誤,但是產生出的 GeoTIFF 檔仍為正常可以使用,不知道為何有問題…

請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料