GIScript2015的IPython Notebook教程

GIScript2015-開放地理空間信息處理與分析Python庫

GIScript是一個開放的地理空間心處理與分析Python框架,GIS內核採用SuperMap UGC封裝,集成多種開源軟件,也可使用其它的商業軟件引擎。python

by wangerqi@supermap.com, 2016-05-03。linux

本文檔介紹GIScript的安裝和配置,並進行簡單的運行測試,以確認安裝的軟件正常運行。

(一)安裝與配置

GIScript的安裝包括系統庫的設置UGC Runtime設置Python庫的設置,經過編寫一個啓動腳本,能夠在給定環境下載入相應的運行庫的路徑。sql

一、下載GIScript支持庫:

cd /home/supermap/GISpark
git clone https://github.com/supergis/GIScriptLib.git

二、UGC系統庫的版本適配。

因爲GIScript的幾個編譯庫版本較新,在默認使用系統老版本庫時部分函數找不到會引發調用失敗,所以須要將這幾個的系統調用指向到GIScript編譯使用的的新版本。在Ubuntu上,具體操做包括:瀏覽器

cd ~/anaconda3/envs/GISpark/lib
mv libstdc++.so libstdc++.so.x
mv libstdc++.so.6 libstdc++.so.6.x
mv libsqlite3.so.0 libsqlite3.so.0.x
mv libsqlite3.so libsqlite3.so.x
mv libgomp.so.1.0.0 libgomp.so.1.0.0.x
mv libgomp.so.1 libgomp.so.1.x
mv libgomp.so libgomp.so.x
  • 能夠運行GIScriptLib/lib-giscript-x86-linux64/下的setup-giscript.sh來自動處理(請根據本身的目錄佈局修改路徑)。服務器

  • 因爲不一樣系統安裝的軟件和版本不一樣,若是還有其它的動態庫衝突,可使用ldd *.so來查看庫的依賴關係,按照上述辦法解決。框架

三、安裝Python的支持庫。

GIScript的Python封裝庫,默認存放在系統目錄:/usr/lib/python3/dist-packages/PyUGC
使用Anaconda時,存在相應的env的目錄下,如:[/home/supermap/Anaconda3]/envs/GISpark/lib/python3.5/site-packages函數

  • 安裝方法一:連接。在[...]/python3.5/site-packages下創建PyUGC的軟鏈接。注意,原文件不可刪除,不然就找不到了。

    ln -s -f /home/supermap/GISpark/GIScriptLib/lib-giscript-x86-linux64/lib ~/anaconda3/envs/GISpark/lib/python3.5/site-packages/PyUGC
  • 安裝方法二:複製。將lib-giscript-x86-linux64/lib(Python的UGC封裝庫)複製爲Python下的site-packages/PyUGC目錄,以下:

    cd /home/supermap/GISpark/GIScriptLib
    cp -r lib-giscript-x86-linux64/lib ~/anaconda3/envs/GISpark/lib/python3.5/site-packages/PyUGC

四、Jupyter啓動以前,設置GIScript運行時 library 載入的路徑:

  • 編寫腳本,啓動前設置GIScript的運行時動態庫路徑,內容以下:

echo "Config GIScript2016..."

# 使用GIScript2015的開發工程目錄,配置示例:
# export SUPERMAP_HOME=/home/supermap/GIScript/GIScript2015/Linux64-gcc4.9

# 使用GIScriptLib運行時動態庫,配置以下:
export SUPERMAP_HOME=/home/supermap/GISpark/GIScriptLib/lib-giscript-x86-linux64
export LD_LIBRARY_PATH=$SUPERMAP_HOME/Bin:$LD_LIBRARY_PATH
echo "Config: LD_LIBRARY_PATH="$LD_LIBRARY_PATH
  • 將上面的內容與Jupyter啓動命令放到start.sh腳本中,以下:

echo "Activate conda enviroment GISpark ..."
source activate GISpark

echo "Config GIScript 2016 for Jupyter ..."
export SUPERMAP_HOME=/home/supermap/GISpark/GIScriptLib/lib-giscript-x86-linux64
export LD_LIBRARY_PATH=$SUPERMAP_HOME/bin:/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH
echo "Config: LD_LIBRARY_PATH="$LD_LIBRARY_PATH

echo "Start Jupyter notebook"
jupyter notebook
  • 修改start.sh執行權限,運行Jupyter Notebook。

    sudo chmod +x start.sh
    ./start.sh

默認配置下,將會自動打開瀏覽器,就能夠開始使用Jupyter Notebook並調用GIScript的庫了。
若是經過服務器使用,須要使用`jupyter notebook --generate-config`建立配置文件,而後進去修改參數,這裏再也不詳述。

(二)運行測試,導入一些數據。

一、導入GIScript的Python庫。

from PyUGC import *
from PyUGC.Stream import UGC
from PyUGC.Base import OGDC
from PyUGC import Engine
from PyUGC import FileParser
from PyUGC import DataExchange
 
import datasource

二、使用Python的help(...)查看庫的元數據信息得到幫助。

#help(UGC)
#help(OGDC)
#help(datasource)

三、設置測試數據目錄。

import os
 
basepath = os.path.join(os.getcwd(),"../data")
print("Data path: ", basepath)
 
file1 = basepath + u"/Shape/countries.shp"
print("Data file: ", file1)
 
file2 = basepath + u"/Raster/astronaut(CMYK)_32.tif"
print("Data file: ", file2)
 
file3 = basepath + u"/Grid/grid_Int32.grd"
print("Data file: ", file3)
 
datapath_out = basepath + u"/GIScript_Test.udb"
print("Output UDB: ",datapath_out)
Data path:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data
Data file:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Shape/countries.shp
Data file:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Raster/astronaut(CMYK)_32.tif
Data file:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Grid/grid_Int32.grd
Output UDB:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/GIScript_Test.udb

四、導入數據的測試函數。

def Import_Test():
    print("Export to UDB: ",datapath_out)
    ds = datasource.CreateDatasource(UGC.UDB,datapath_out)
    datasource.ImportVector(file1,ds)
    datasource.ImportRaster(file2,ds)
    datasource.ImportGrid(file3,ds)
    ds.Close()
    del ds
    print("Finished.")

五、運行這個測試。

try:
    Import_Test()
except Exception as ex:
    print(ex)
 
Export to UDB:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/GIScript_Test.udb
建立數據源成功!!
Import Vector:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Shape/countries.shp
數據導入成功:Import Vector /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Shape/countries.shp
Import Raster:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Raster/astronaut(CMYK)_32.tif
數據導入成功:Import Image /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Raster/astronaut(CMYK)_32.tif
Import Grid:  /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Grid/grid_Int32.grd
數據導入成功:Import Grid /home/supermap/GISpark/git_notebook/geospatial/giscript/../data/Grid/grid_Int32.grd
Finished.

(三)查看生成的數據源文件UDB。

下面使用了IPython的Magic操做符 !,能夠直接運行操做系統的Shell命令行。

!ls -l -h ../data/GIScript_Test.*
-rw-rw-r-- 1 supermap supermap 5.6M 5月   4 09:46 ../data/GIScript_Test.udb
-rw-r--r-- 1 supermap supermap  74K 5月   4 09:46 ../data/GIScript_Test.udd

刪除生成的測試文件。注意,不要誤刪其它文件!

若是重複運行上面的Import_Test()將會發現GIScript_Test.udb和GIScript_Test.udd文件會不斷增大。
可是打開UDB文件卻只有一份數據,爲何呢?

  • 由於UDB文件是增量存儲的,不用的存儲塊須要使用SQLlite的存儲空間緊縮處理才能回收。

!rm ../data/GIScript_Test.*

再次查看目錄,文件是否存在。

!ls -l -h ../data/GIScript_Test.*
-rw-rw-r-- 1 supermap supermap  12M 5月   4 09:44 ../data/GIScript_Test.udb
-rw-r--r-- 1 supermap supermap 122K 5月   4 09:44 ../data/GIScript_Test.udd
相關文章
相關標籤/搜索