GIScript2016-Docker 數據導入源碼

GIScript2016-數據導入教程

** GIScript2016是支持Python3的地理空間數據處理和分析工具包,支持Jupyter和Spark。**python

GIScript2016支持Spark,能夠運行在單機以及大規模集羣之上。這裏基於Docker的Jupyter Notebook進行空間數據導入,稍加修改後便可直接用於大量空間數據的批量處理。內容包括:json

  • 建立UDB數據源。
  • 導入Shape矢量格式。
  • 導入Tif影像格式。
  • 導入CSV和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

導入矢量(shape)格式

'''
! \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成功!!

導入csv格式數據

'''
! \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成功!!

導入GeoJSON格式數據

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()
相關文章
相關標籤/搜索