基于QGIS的地名搜索插件开发

2013-12-11 07:27邱儒琼何保国
测绘通报 2013年2期
关键词:插件开源数据库

邱儒琼,何保国

(1.湖北省基础地理信息中心,湖北武汉430071;2.湖北省测绘局,湖北武汉430071)

一、引 言

3S技术是目前IT领域的热门话题,GIS也随着Google Earth的流行而被越来越多的人所熟知。在GIS流行的背后,它关联着人们日常生活的方方面面,也有越来越多的开源GIS在默默贡献自己的力量。在众多的开源桌面GIS软件中,QGIS以其用户界面友好、广泛支持操作系统等特点,拥有广大的用户群[1]。由于QGIS是基于Qt跨平台类库开发,因此支持目前最为广泛的操作系统如Linux、Unix、Mac OSX和Windows等,这一点是其他很多桌面GIS软件所不可企及的。而最为重要的是,其重构了QGIS的API库,方便用户进行二次开发。通常GIS需要回答“我们在哪儿”或“我们到哪儿”等这类与地理位置相关的问题,但目前QGIS还只支持针对空间数据的属性搜索功能,而不具备针对用户自定义的关系型数据表格的属性搜索功能。由于QGIS具有支持插件模式的优点,因此可以通过地名搜索插件来扩展QGIS在地名搜索方面的功能。本文将利用常见地名数据库,阐述在PyQt环境下利用Python语言来开发QGIS地名搜索插件的方法。

二、总体设计

1.功能设计

近年来,信息技术发展迅猛,信息网络广泛普及,传统的地名服务管理模式已不能满足社会需求。建立和完善地名数据库,开展地名信息化服务,已成为地名工作的必然选择和发展方向。一般而言,地名地址数据库包括水系、陆地地形、行政区域及其他区域、居民点,以及具有地名意义的交通运输设施,具有地名意义的水利、电力、电信设施,具有地名意义的纪念地、旅游胜地,具有地名意义的建筑物、构筑物,具有地名意义的单位9大类数据。其数据库表结构含有地名地址名称、地理坐标X值、地理坐标Y值、地名地址类型、所属行政区划等基本字段和其他扩充信息。

随着社会各部门信息化水平的提高,各种业务数据、统计数据及其他数据急剧增加,大多数的业务数据与地理位置都有着紧密的联系,而通过GIS实现对业务数据的管理也逐渐成为一种被大家认同的趋势。地名查询定位是GIS应用中的一个常用功能,它借助于基础地名地址库中的位置信息,采用模糊匹配的地名查询方法,实现地名数据空间位置与业务数据的关联。因此,本文的地名搜索插件主要包括两大功能:

1)根据给定的地名查询条件,从地名地址数据库中筛选出符合条件的地名并显示输出。

2)根据所查询地名所对应的地理坐标实现在地图上的定位。

2.开发模式

QGIS是开源桌面 GIS,除了核心功能以外,QGIS还支持插件扩展。核心插件(core plugins)由QGIS开发组维护,包含在所有的QGIS发行版中;外部插件(external plugins)由爱好者们开发,由核心插件plugin installer加载。QGIS支持C++和Python两种语言进行插件开发。由于Python是一种简单易学、功能强大的编程语言,有高效率的高层数据结构,能简单而有效地实现面向对象编程,且Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的很多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发[2],所以本文选择采用 Python和 PyQt进行地名搜索插件的开发。

三、功能实现

QGIS的插件开发通常需要经过环境配置、Qt GUI资源准备、代码编写和插件测试4个环节,本文将详细介绍各环节的具体内容。

1.环境配置

首先,为创建GUI做好准备工作,即先进行开发环境的配置工作,包括在Windows操作系统下安装Python2.5.1、Pywin32-216.win32-Py2.5、PyQt-Py2.5-gpl-4.7.3-1、QGIS-OSGeo4W-1.7.0-b55a00e73-Setup等QGIS、Python、Qt、PyQt开发工具;然后准备测试地名地址数据库(数据库名为allpoint.mdb,地名地址表含地名、Coor_X、Coor_Y)和相应的测试数据。

2.准备Qt GUI资源

1)编译工具图标。根据工具图标,使用PyQt的资源编译器pyrrc4命令行pyrcc4-o resources.py resource.qrc,生成描述资源的 Python文件(resources.py)。

2)设计对话框。使用Qt Designer创建对话框和主窗口中的输入框、文字标签、表格及命令按钮等部件,并定义它们的大小、位置等属性,最后使用PyQt的pyuic4命令行将对话框转换到Python文件(ui_searchbypoi.py)。

3)创建初始化文件(__init__.py)和实现类文件(searchbypoidialog.py,searchbypoi_gui.py,searchbypoi.py)。所有文件结构如图1所示。

图1 开发文件列表

4)设置插件存放路径。在Window的C:Program FilesQuantum GISWroclawappsqgispythonplugins或 C:Documents and Settings(user).qgispythonplugins路径下创建一个子目录(searchbypoi),将上述所有创建的文件拷贝至所创建的子目录下。QGIS将Python插件和C++插件一同列在插件管理器中,方便QGIS启动后由核心插件Plugin Installer自动加载。

3.编写代码

在各实现类文件中编写代码,其中主要功能由searchbypoi_gui.py的两个内部函数(SearchFromDB和LocateMap)实现。示例代码如下

4.插件测试

完成代码编写后,可以关闭并重新启动QGIS,导入笔者开发的插件,并输入查询字符串进行测试,查询定位效果截屏如图2所示。同时,也可以将开发好的插件发布到QGIS插件库中,使其成为QGIS资源库的一部分,为开源GIS贡献自己的一部分力量。

图2 地名搜索与定位

四、结束语

不同于商业GIS软件,开源GIS软件无需背负数据兼容、易用性、软件成本等问题的包袱,开发者能够将精力集中于功能的开发。因此,开源GIS软件功能普遍很强,技术也非常先进,其背后是来自技术狂热者和学院研究者的大力支持。QGIS以其拥有的几十个核心插件和大量的外部插件,为各个领域的地理信息应用提供了强大的支持。本文在PyQt环境下,利用Python作为开发语言,通过访问地名地址数据库,开发了一个简单实用的地名搜索插件,是对我国开源GIS开发应用层次与国际接轨的一次探索,同时也对开发人员采用此技术路线,改进地名搜索算法或利用地名搜索服务来实现类似功能提供了参考解决方案。

[1]SHERMAN G E.Desktop GIS:Mapping the Planet with Open Source Tools[M].USA:Pragmatic Bookshelf,2008.

[2]SUMMERFIELD M.Rapid GUI Programming with Python and Qt[M].USA:Prentice Hall,2007.

[3]陈杰.GIS的开源夜宴[J].软件世界,2006(20):38.

猜你喜欢
插件开源数据库
自编插件完善App Inventor与乐高机器人通信
五毛钱能买多少头牛
2019开源杰出贡献奖
数据库
基于jQUerY的自定义插件开发
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
数据库
数据库
数据库