GIScript2016-Docker 数据导入源码

原创
2016/10/13 16:50
阅读数 235

GIScript2016-数据导入教程

** GIScript2016是支持Python3的地理空间数据处理和分析工具包,支持Jupyter和Spark。**

GIScript2016支持Spark,可以运行在单机以及大规模集群之上。这里基于Docker的Jupyter Notebook进行空间数据导入,稍加修改后即可直接用于大量空间数据的批量处理。内容包括:

  • 创建UDB数据源。
  • 导入Shape矢量格式。
  • 导入Tif影像格式。
  • 导入CSV和JSON格式。

引用GIScript的支持库

# 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打开数据源,查看数据。 **

查看导入后的数据源信息

ds = OpenDatasource("UDB", strUDB) 
打开数据源成功!!
# 查看数据源对象的方法。
# help(ds)
# 查看数据集个数。
dscount = ds.GetDatasetCount()
print(dscount)
6
# 关闭数据源。
ds.Close()
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部