【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
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()
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/758095