** GIScript2016是支持Python3的地理空間數據處理和分析工具包,支持Jupyter和Spark。**python
GIScript2016支持Spark,能夠運行在單機以及大規模集羣之上。這裏基於Docker的Jupyter Notebook進行空間數據導入,稍加修改後便可直接用於大量空間數據的批量處理。內容包括:json
引用GIScript的支持庫oracle
# coding: utf-8 import sys from GIScript import GISCore, Data, Conversion
# help(GISCore)
''' ! \brief 文件路徑定義 ''' strTiffPath = "Raster/astronaut(CMYK)_32.tif" strShapePath = "Vector/countries.shp" strCSVPath = "Vector/Hospital.csv" strGJBPath = "Vector/KN0839" strJsonPath = "Vector/Polygon.json" strUDB = "DB/ConversionTest.udb"
檢查一下,上面的文件是否存在。不在給定的目錄下,須要修改上面的路徑定義。工具
** 打開數據源,若是不存在,則建立一個新的數據源。默認爲UDB格式。 **指針
''' ! \brief 打開數據源,目前支持oracle和UDB ! \param strType [I] 數據源類型(UDB/OraclePlus) ! \param strServer [I] 服務名 ! \param strUser [I] 用戶名 ! \param strPassword[I] 密碼 ! \return 若是成功則返回數據源指針,不然返回空指針 ! \remarks ''' 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
''' ! \brief 導入矢量數據 ! \param strFileType [I] 文件類型(如:fileSHP) ! \param strImportMode[I] 導入類型(ModeGIS/ModeCAD) ! \param strFileName [I] 文件路徑 ! \param ds [I] 數據源 ! \return 成功則返回true,不然返回false ! \remarks ''' 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
ds = OpenDatasource("UDB", strUDB) try: if ds != None: bImport = ImportVector(ds, strShapePath, "fileSHP", "ModeGIS") if bImport == 1: print("數據導入Shape成功!!") else: print("數據導入Shape失敗!!") ds.Close() else: print("打開數據源失敗!") except SystemExit: raise except: sys.stderr.write("""An internal error occured.""") raise
打開數據源成功!! 數據導入Shape成功!!
''' ! \brief 導入CSV數據 ! \param strImportMode[I] 導入類型(ModeGIS/ModeCAD) ! \param strFileName [I] 文件路徑 ! \param ds [I] 數據源 ! \return 成功則返回true,不然返回false ! \remarks ''' 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: # 導入矢量(CSV) bImport = ImportCSV(ds, strCSVPath, "ModeGIS", [0,1], True) if bImport == 1: print("數據導入CSV成功!!") else: print("數據導入CSV失敗!!") ds.Close() else: print("打開數據源失敗!") except SystemExit: raise except: sys.stderr.write("""An internal error occured.""") raise
打開數據源成功!! 數據導入CSV成功!!
''' ! \brief 導入柵格數據 ! \param strFileType [I] 文件類型(如:fileTIF) ! \param strImportMode[I] 導入類型(ModeIMG/ModeGRID) ! \param strFileName [I] 文件路徑 ! \param ds [I] 數據源 ! \return 成功則返回true,不然返回false ! \remarks ''' 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
ds = OpenDatasource("UDB", strUDB) try: if ds != None: # 導入影像(tiff) bImport = ImportRaster(ds, strTiffPath, "fileTIF", "ModeIMG") if bImport == 1: print("數據導入tiff成功!!") else: print("數據導入tiff失敗!!") ds.Close() else: print("打開數據源失敗!") except SystemExit: raise except: sys.stderr.write("""An internal error occured.""") raise
打開數據源成功!! 數據導入tiff成功!!
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
打開數據源成功!! 數據導入GeoJson成功!!
** 而後,能夠使用iDesktop Cross打開數據源,查看數據。 **code
ds = OpenDatasource("UDB", strUDB)
打開數據源成功!!
# 查看數據源對象的方法。 # help(ds)
# 查看數據集個數。 dscount = ds.GetDatasetCount() print(dscount)
6
# 關閉數據源。 ds.Close()