【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
GIScript2016是支持Python3的地理空间数据处理和分析工具包,支持Jupyter和Spark,可以运行在单机以及大规模集群之上。这里介绍基于Docker的GIScript+Jupyter这一技术栈,使用其进行空间数据导入的具体过程,稍加修改后即可直接用于大量空间数据的批量处理。点击查看【完整数据导入源码】。
1. 准备工作-创建容器实例
在博文【GIScript2016-Docker上的Jupyter Notebook部署】和【GIScript2016-Docker 快速入门】中,分别介绍了将GIScript部署到Docker中,以及将这个容器镜像推送到DockerHub上,然后在联网的其它计算机中使用的方法。
1.1 现在,我们拉取所创建的GIScript2016容器:
docker pull openthings/gispark
1.2 创建GIScript的本地目录:
mkdir GISpark
cd GISpark
1.3 创建容器的运行实例:
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界面。
2. 创建一个新的Notebook
点取“New”按钮,选取“Python3”,创建一个新的Notebook。
2.1 导入GIScript库。
# coding: utf-8
import sys
from GIScript import GISCore, Data, Conversion
查看库的帮助,输入:
help(GISCore)
2.2 保存Notebook。
直接Ctrl+S(Mac OS为Command+S)即可保存当前的Notebook。 或者点击“保存”图标,或选择“File”->"Save",均可保存当前Notebook。
2.3 下载Notebook到本地。
选择“File”->“Download as”可以将当前的Notebook保存为多种格式,如:ipynb、HTML、reST、Markdown等等。
2.4 上传Notebook到服务器。
在主界面“Files”选项页点击“Upload”即可上传文件。可以在本地进行模型的开发和测试,然后上传到服务器上执行。
3. 创建UDB数据源
打开UDB数据源,如果不存在,将自动创建。
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
4. 导入空间数据
strUDB = "DB/ConversionTest.udb"
ds = OpenDatasource("UDB", strUDB)
bImport = ImportVector(ds, strShapePath, "fileSHP", "ModeGIS")
# 如果bImport == 1,导入成功,否则失败。
4.1 导入shape矢量文件
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
4.2 导入tif影像文件
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
4.3 导入csv格式文件
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
4.4 导入json格式文件
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
点击查看【完整数据导入源码】。
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/758043