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
这个例程打开一个数据源,然后将一个栅格文件导入其中。
照着这个例子,可以编写一个批量数据导入的脚本,实现数据的快速导入。