GIScript2016是支持Python3的地理空間數據處理和分析工具包。python
GIScript2016支持Jupyter和Spark,能夠運行在單機以及大規模集羣之上。GIScript with Jupyter+Spark on Docker這一技術棧很是強大,經過conda包管理程序還能夠安裝大量的科學計算包,如NumPy、Scikit、Pandas以及OpenCV、NLTK、Tensorflow、Keras等機器學習軟件包,實在是大數據處理、分析和深刻研究的神器。c++
GIScript2016將C++系統庫封裝爲Python的過程所有開源了出來,方便研究者使用C++編寫本身的專業算法庫,而後添加到這個框架中來,是編寫高性能的Python擴展模塊的極佳參考。git
下面咱們在Docker中進行部署GIScript2016的方法,而後使用Jupyter Notebook進行基於瀏覽器的訪問。一旦環境設置完畢,就能夠在不少環境下部署Docker容器,使用很是方便。Jupyter Notebook是基於瀏覽器的編程「筆記本」,很是適合進行數據探索類的研究。github
我用的Mac OS X,如今的Docker已經原生支持了,不用像之前要安裝VirtualBox,再使用Vagrant了。
到這裏http://www.docker.io下載相應的版本,而後運行安裝程序,就能夠了。算法
若是使用Ubuntu,建議使用 http://get.docker.io下載的腳本進行安裝,官方的安裝方法貌似與Ubuntu內置的lxd有衝突,常常出問題。方法以下:sql
wget http://get.docker.io -O docker-setup.sh sudo chmod +x docker-setup.sh ./docker-setup.sh
採用Jupyter的官方Docker技術棧。docker
docker run -it --name GISpark -p 9000:8888 --user root -e GRANT_SUDO=yes -v /本地目錄/GISpark:/home/jovyan/work/GISpark jupyter/all-spark-notebook
打開瀏覽器,輸入:http://localhost:9000。編程
在裏面打開一個終端窗口,運行升級程序,安裝須要的軟件:瀏覽器
sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-dev
git clone https://git.oschina.net/GIScript/GIScript2016.git
進入SIP目錄,首先進入3dParty,運行:框架
python3 configure.py make sudo make install
返回上級目錄,運行:
python3 configure.py
進入Build目錄,運行:
sudo make install
進去SIP/Build目錄,打開GNUmake.opt文件,按照下面修改:
# Set python. If you don't #PY_LIB = "/usr/lib/python3" #PY_INCLUDE = "/usr/include/python3.5m" PY_LIB = "/opt/conda/lib/python3.5" PY_INCLUDE = "/opt/conda/include/python3.5m"
再次運行make
,又出現fatal error: X11/Xlib.h: No such file or directory
,估計是缺乏x11的支持庫了。
安裝x11的開發庫:
sudo apt-get install libx11-dev
再次運行make
,編譯經過。
運行python3,輸入:
from GIScript import GISCore
顯示找不到啊,到/opt/conda/lib/python3.5/dist-packages下去看,文件全都在呢!
估計是權限吶、路徑吶啥的沒有找到。換個目錄試試:
cp GIScript ../site-packages
再次運行,此次成功了,不過又提示libSuBase.so: cannot open shared object file: No such file or directory
。有一些基礎動態庫沒有找到,下面還須要設置一下UGC基礎庫的路徑。
這裏須要修改start.sh這個文件,在啓動Jupyter是設置,這個文件/usr/local/bin/目錄下。 首先拷貝過來,修改,再拷貝回去。在前面添加內容:
# Add GIScript Library Path of UGC. export SUPERMAP_HOME=/home/jovyan/work/supermap/GIScript2016 export LD_LIBRARY_PATH=$SUPERMAP_HOME/Bin64_Linux_gcc4_9:$LD_LIBRARY_PATH
而後從新啓動docker。
docker stop GISpark docker start GISpark
參考這裏設置動態庫的路徑。除了上面的路徑以外,由於Ubuntu14.04有點老了,還有一些系統庫的版本須要更新。
cd /opt/conda/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
from GIScript import GISCore print(GISCore)
將顯示GISCore的幫助信息,系統配置成功。
from GIScript import GISCore from GIScript import Data from pyspark import SparkConf, SparkContext APP_NAME = "GeoTest For Spark" def main(sc): pnt = GISCore.Point2D(12.0,32.0) geo = Data.GeoPoint() b = geo.Make(pnt) br = sc.broadcast(geo) c = sc.parallelize(range(0,1000),10).map(lambda x:br.value.GetPoint()).collect() for i in c: print(i) sc.stop() if __name__ == "__main__": # Configure Spark conf = SparkConf().setMaster("spark://master:7077") conf = conf.setAppName(APP_NAME) sc = SparkContext(conf=conf) main(sc)
# coding: utf-8 import sys from GIScript import GISCore,Conversion ''' ! \brief 文件路徑定義 ''' strTiffPath = "Raster/astronaut(CMYK)_32.tif" if __name__ == '__main__': try: fileParser = Conversion.FileParser() bOpen = fileParser.Open(strTiffPath, "fileTIF") if bOpen: rasterInfo = fileParser.GetRasterInfo() nWidth = rasterInfo.GetWidth() nHeight = rasterInfo.GetHeight() pixelFormat = rasterInfo.GetPixelFormat() rc2Bounds = rasterInfo.GetBounds() nBandCount = rasterInfo.GetBandCount() nBlockSize = rasterInfo.GetBlockSize() strPrj = rasterInfo.GetProjection() dXRatio = rc2Bounds.Width()/nWidth dYRatio = rc2Bounds.Height()/nHeight colorset = rasterInfo.GetColorset() dMax = rasterInfo.GetMax() dMin = rasterInfo.GetMin() dNoValue = rasterInfo.GetNoValue() print("=========文件基本信息=========") print(" 圖片寬:" , nWidth) print(" 圖片高:" , nHeight) print(" 像素格式:",pixelFormat) print(" 波段數:", nBandCount) print(" 塊大小:",nBlockSize) print(" 是不是塊存儲數據:",rasterInfo.GetIsTile()) print(" Bound範圍(左上右下):(", rc2Bounds.left, ","\ ,rc2Bounds.top, ",", rc2Bounds.right, ",", rc2Bounds.bottom, ")") print(" X、Y分辨率:", dXRatio, dYRatio) print(" 顏色表大小:" , len(colorset)) print(" 極大值:" , dMax) print(" 極小值:" , dMin) print(" 無值:", dNoValue) if strPrj != "": print(" 投影:", strPrj) else: print(" 投影:平面座標系") print("=============================") fileParser.Close() except SystemExit: raise except: sys.stderr.write( """An internal error occured. """) raise
上面的配置完成後,咱們可以已經充分體會到了GIScript with Jupyter+Spark on Docker這一技術棧的強大能力,尤爲是經過conda包管理程序還能夠很是容易地進行各類科學計算包的安裝,實在是大數據處理、分析和深刻研究的神器。下一步爲了更好地部署和共享: