GIScript2015是一个通用的GIS脚本库,可以帮助进行地理空间数据的处理和分析,提高数据处理的效率,帮助进行地理科学的研究。GIScript2015是一个开源工程,已建立Git版本库和虚拟Team、微信群(两个:GIScript语言、GIScript开发者)。
GIScript2015与GIScript的区别是2015版完全采用SIP进行封装,与Qt和PyQt具有较好的相容性,接口可以与C++保持一致,从而减少了封装维护资源和增加了易用性。GIScript2015现已完成Windows/Linux的64位基础版本,可运行于UbuntuKylin15.04。
GIScript2015可以支持Python并行框架Celery(本人已测试通过),从而实现分布式的数据处理调度操作。这个跟Hadoop和Spark应该也可以挂接上去运行的,有兴趣的同学可以试试。另外,这个里面的UGC基础库可以支持MongoDB,这个对大数据的存储和处理可是个利器。
现在,我们开始一个简单的例程,感受一下GIScript运行的过程,体验一下使用脚本的“懒人模式”。
GIScript完全是绿色软件、拷贝即用,不需要特殊的复杂安装,使用Python3。
但是呢,UGC的SIP封装由于全部开放源码出来了,如果是获取的原始工程,需要自己先进Linux64-gcc4.9/SIP/UGC这个目录运行make/make install进行编译和安装(如果是编好的特定操作系统的版本,那么拷贝就可以用的)。由于使用sip封装,因此需要先编译安装sip才行的哦。
SIP和PyQt的安装参考http://my.oschina.net/u/2306127/blog/484061。需要了解SIP封装的详细的内容可以看这里:http://my.oschina.net/u/2306127/blog/470102。这是一个开放的支持库模式,自己也可以写一个C++的库,参考这个封装过程做成Python来使用,把不同的功能集成到一起。
进系统目录。
#运行gis.sh,进入Python3
./gis.sh
或者,直接运行一个测试。
./gisrun.sh /testbed/test.py
下面我们先看一下gisrun.sh的内容。
#!/bin/sh
echo "========================================================"
echo "*GIScript---Scripting The World. *"
echo "********************************************************"
echo "*GIScript Starting... *"
echo "*Project: https://git.oschina.net/supergis/GIScript2015*"
echo "*DevTeam: https://team.oschina.net/GIScript/tweet *"
echo "========================================================"
#set the enviroment-variable.
export SUPERMAP_HOME=/home/supermap/GIScript/GIScript2015/Linux64-gcc4.9
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SUPERMAP_HOME/Bin
#start run python script.
if [ x$1 != x ]
then
echo "Run file:" $1
python3 $1
else
echo "Usage: gisrun.sh myprocess.py"
fi
这个脚本将设置环境变量,然后启动python3去运行一个Python文件。
如果GIScript2015的安装路径与上面的SUPERMAP_HOME不同,修改改路径即可。
我们再来看看test.py里面的内容:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import os
import PyUGC
from PyUGC import UGC
from PyUGC import OGDC
if __name__=='__main__':
ds = UGC.UGDataSourceManager.CreateDataSource(UGC.UDB)
con = ds.GetConnectionInfo()
strTemp = OGDC.OgdcMBString("/home/supermap/GIScript/GIScript2015/data/world.udb")
OGDC.MBString2Unicode(strTemp, con.m_strServer)
bOpen = ds.Open()
if bOpen[0] == 1:
print("打开数据源成功!!")
else:
print("打开数据源失败!!")
strFileName = OGDC.OgdcUnicodeString()
strTemp = OGDC.OgdcMBString("/home/supermap/GIScript/GIScript2015/data/grid_Int32.grd")
OGDC.MBString2Unicode(strTemp, strFileName)
importParams = UGC.UGExchangeParamsManager.MakeImportParams(UGC.UGFileType.AIASCIIGrid)
importParams.SetImportMode(UGC.UGImportParams.ModeGrid)
importParams.SetFilePathName(strFileName)
dataExchange = UGC.UGDataExchange()
dataExchange.AttachDataSource(ds)
bIsSuccss = dataExchange.Import(importParams)
if bIsSuccss == 1:
print("数据导入成功!!")
else:
print("数据导入失败!!")
pass
del importParams
ds.Close()
del ds
pass
这个例程打开一个数据源,然后将一个栅格文件导入其中。
照着这个例子,可以编写一个批量数据导入的脚本,实现数据的快速导入。
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/484213