GIScript2016是支持Python3的地理空間數據處理和分析工具包,支持Jupyter和Spark,能夠運行在單機以及大規模集羣之上。這裏介紹基於Docker的GIScript+Jupyter這一技術棧,使用其進行空間數據導入的具體過程,稍加修改後便可直接用於大量空間數據的批量處理。點擊查看【完整數據導入源碼】。docker
在博文【GIScript2016-Docker上的Jupyter Notebook部署】和【GIScript2016-Docker 快速入門】中,分別介紹了將GIScript部署到Docker中,以及將這個容器鏡像推送到DockerHub上,而後在聯網的其它計算機中使用的方法。json
docker pull openthings/gispark
mkdir GISpark cd GISpark
docker run -it --name GISpark \ -p 9000:8888 \ --user root -e GRANT_SUDO=yes \ -v /home/supermap/GISpark:/home/jovyan/work/GISpark \ openthings/gispark
打開瀏覽器,輸入:http://localhost:9000 ,便可看到Notebook的Web界面。瀏覽器
點取「New」按鈕,選取「Python3」,建立一個新的Notebook。 服務器
# coding: utf-8 import sys from GIScript import GISCore, Data, Conversion
查看庫的幫助,輸入:工具
help(GISCore)
直接Ctrl+S(Mac OS爲Command+S)便可保存當前的Notebook。 或者點擊「保存」圖標,或選擇「File」->"Save",都可保存當前Notebook。測試
選擇「File」->「Download as」能夠將當前的Notebook保存爲多種格式,如:ipynb、HTML、reST、Markdown等等。spa
在主界面「Files」選項頁點擊「Upload」便可上傳文件。能夠在本地進行模型的開發和測試,而後上傳到服務器上執行。.net
打開UDB數據源,若是不存在,將自動建立。code
def OpenDatasource(strType, strServer, strUser="", strPassword=""): dscn = Data.DsConnection() dscn.m_strType = strType dscn.m_strServer = strServer dscn.m_strUser = strUser dscn.m_strPassword = strPassword ds = Data.DataSource() ds.SetDsConnection(dscn) bOpen = ds.Open() if bOpen: print("打開數據源成功!!") return ds else: print("打開數據源失敗,請檢查數據源連接信息!") return None
strUDB = "DB/ConversionTest.udb" ds = OpenDatasource("UDB", strUDB) bImport = ImportVector(ds, strShapePath, "fileSHP", "ModeGIS") # 若是bImport == 1,導入成功,不然失敗。
def ImportVector(ds, strFileName,strFileType, strImportMode): importParams = Conversion.ParamsManager.MakeImportParams(strFileType) importParams.m_strFilePath = strFileName importParams.m_strImportMode = strImportMode dtImport = Conversion.DataImport() dtImport.SetParams(importParams) bImport = dtImport.ImportVector(ds) return bImport
def ImportRaster(ds, strFileName,strFileType, strImportMode): importParams = Conversion.ImportParamsRaster() importParams.m_strFilePath = strFileName importParams.m_strFileType = strFileType importParams.m_strImportMode = strImportMode dtImport = Conversion.DataImport() dtImport.SetParams(importParams) bImport = dtImport.ImportRaster(ds) return bImport
def ImportCSV(ds, strFileName, strImportMode, nIndexs = [], bHasFirst = False): importParams = Conversion.ImportParamsCSV() importParams.m_strFilePath = strFileName importParams.m_strImportMode = strImportMode importParams.m_Indexs = nIndexs importParams.m_bHasFirstRow = bHasFirst dtImport = Conversion.DataImport() dtImport.SetParams(importParams) bImport = dtImport.ImportVector(ds) return bImport
ds = OpenDatasource("UDB", strUDB) try: if ds != None: # 導入矢量(GeoJson) bImport = ImportVector(ds, strJsonPath, "fileGeoJson", "ModeGIS") if bImport == 1: print("數據導入GeoJson成功!!") else: print("數據導入GeoJson失敗!!") ds.Close() else: print("打開數據源失敗!") except SystemExit: raise except: sys.stderr.write("""An internal error occured.""") raise
點擊查看【完整數據導入源碼】。blog