APP下载

Spatialite在移动端离线数据解决方案中的应用研究

2015-02-06陈俊明

地理空间信息 2015年2期
关键词:空间数据离线矢量

陈俊明

(1.福建省基础地理信息中心,福建 福州 350003)

Spatialite在移动端离线数据解决方案中的应用研究

陈俊明1

(1.福建省基础地理信息中心,福建 福州 350003)

简要分析了移动终端数据调用的主要方式,尤其是离线数据的调用格式,重点介绍了Spatialite空间数据库原理,探讨了其应用于离线空间数据查询分析的可行性,最后根据实际业务需求,实现了基于Spatialite空间数据库的离线数据查询分析与管理。

Spatialite;移动GIS;离线数据

1 移动客户端空间数据的加载

目前,移动客户端加载空间数据有在线和离线2种调用方式。在线的数据调用方式实质是访问已发布的各种地图服务,不仅可以实现基本的地图浏览操作与属性查询功能,还能满足用户对空间分析与几何运算的功能需求,但也存在一定的局限性:第一,用户并不一定始终处于有网络的环境中;第二,复杂的空间分析与几何运算需要频繁地与服务器进行交互,数据吞吐量大,对网络带宽要求高。因此,在无法保证网络环境与网络带宽的情况下,离线数据调用方式在实际应用中的需求是较为普遍的。

离线地图数据存储格式主要有4种:json文本、Shapefile、Spatialite以及地图缓存(*.bundle/*.tpk)[1],均可较好地支持对离线数据的加载与浏览。但是,json文本需要预先加载在线服务下载获取;Shapefile数据获取方便,但其本身并不提供对离线数据的查询分析接口,且文件类型太多,不利于数据的统一管理;地图缓存(*.Bundle/*.tpk)则因数据量太大,拷贝或携带都相对不方便,同样不支持对数据的查询与分析。作为开源的轻量级空间数据库,Spatialite支持SQL语句对几何类型字段的操作,因此,本研究结合实际项目需求,在了解和掌握Spatialite空间数据库原理的基础上,探索研究在移动客户端实现离线数据查询分析的技术可行性。

2 Spatialite空间数据库原理

2.1 Spatialite数据库简介

Spatialite空间数据库是一个简单、实用的轻量级空间数据库,支持跨平台空间数据操作[2]。按照OGC标准存取空间数据,支持以ESRI Shapefile、dbf、txt/ csv文本以及*.xls表格等作为数据源,不仅支持对一般属性表的查询操作,而且提供了丰富的SQL扩展函数,用以支持SQL语句操作几何类型字段,包括各种空间查询与分析操作。李玲等将Spatialite空间数据库嵌入GPS/PDA的GIS外业土地调查系统中,实现了空间数据与属性数据的集中管理[3]。同时,作为一个开源类库,它也提供了丰富的跨平台二次开发接口,用户可在此基础上进行深层次的GIS应用开发。其主要依赖于GNU iconv、Geos、PROJ.4以及FreeXL等开源类库,其中,Geos与PROJ.4提供了操作几何对象以及坐标重投影的函数接口。唐群等利用开源数据库Spatialite的空间分析功能和AutoCAD的二次开发语言ObjectARX.Net对dwg格式的宗地数据进行处理,并实现入库管理[4]。

2.2 Spatialite空间数据库管理

为了高效地管理、查询与分析矢量空间数据,Spatialite采用了元数据与空间索引机制。Spatialite空间数据库以*.sqlite/*.db格式的单文件形式存在,易于携带或拷贝,适用于不同的操作系统或平台环境。入库后的矢量数据表现为一般的属性表,通过Geometry字段来统一管理空间数据,而数据的基本描述信息则存储于Spatialite空间元数据表中(geometry_columns表、spatial_ref_sys表[3]),包括空间数据的表名、空间字段名、空间实体的几何类型、坐标维数以及坐标参考信息等。

Spatialite空间数据库提供了丰富的SQL扩展函数,以支持SQL语句操作几何类型字段,实现对离线空间数据的查询与分析操作,包括Buffer、Intersect、Union等。为了加快数据库的访问速度,Spatialite通过R-tree索引机制来提高空间查询与空间分析的速度[3]。R-tree是一种空间索引数据结构,是B-tree向多维空间发展的另一种形式,它将空间对象按范围划分,每个节点都对应一个区域和一个磁盘页,叶节点的磁盘页中存储其区域范围内所有空间对象的外接矩形[5]。Spatialite矢量数据的R-tree索引实质上就是该图层内所有几何对象的分层MBR索引,建立R-tree索引时,每个节点包含一个矩形区域的索引码,该矩形区域由对应节点所有子节点的最小外接矩形(MBR)嵌套组成[3]。Spatialite提供了2种方式:①采用SQL语句建立索引;②采用扩展SQL函数Create SpatialIndex创建索引。为了保证空间索引与数据库的一致性,在完成对空间数据库Insert/Update/Delete等操作后,需要及时同步更新R-tree索引。

3 基于Spatialite的离线数据查询与分析

本研究在了解掌握Spatialite空间数据库原理的基础上,根据实际应用中调用离线数据的具体业务需求,尤其是离线数据的查询与分析,基于Spatialite空间数据库,统一管理移动客户端的离线矢量数据,以XCode4.6.1为开发平台,采用Objective-c开发语言重构Spatialite API,并搭建业务逻辑层框架,实现对离线数据浏览、查询分析等,具体技术流程如图1。

3.1 Spatialite空间数据库建库管理

图 1 技术流程图

Spatialite空间数据库支持*.shp、*.xls、*.txt、*.dbf、*.csv等格式的表格文件作为数据源,创建或导入后的数据以table形式存在。Spatialite提供2种方式用以操作数据库,包括可视化界面操作(Spatialite GUI)与命令行方式。

1)Spatialite GUI是一款具有可视化界面的Spatialite数据库管理工具,主要是通过SQLite DBMS引擎,能够支持几何字段操作的扩展SQL函数、虚拟shape、虚拟文本、虚拟网络以及R-tree和Mbrcache来组织和管理空间数据[6]。通过Spatialite GUI可以创建一个后缀名为sqlite或db的Spatialite数据库文件,并通过“Load Shapefile”或“Virual Shapefile”导入shape矢量数据。操作过程中需要注意编码类型的选择,错误的编码类型易导致中文字段乱码,同时还要保证SRID对应的空间参考系统与矢量图层一致,其空间数据存储在Geometry字段中,最后需要对入库后的空间数据建立R-tree索引。

2)命令行的操作流程主要包括3个步骤:①利用spatialite_init(0)初始化数据库;②sqlite3_open()函数可以打开或创建数据库,对于指定的数据库路径,若存在,则直接打开,否则创建并打开数据库;③利用sqlite3_exec()执行SQL语句,完成对表的各种操作[7]。

Spatialite空间数据库不仅支持对非空间数据表的创建、查询、删除、更新等操作,同时,还提供了丰富的SQL扩展函数,用以支持对空间数据表的空间查询与空间分析。几何对象的空间查询主要有2种方式:①查询2个几何对象的真实空间位置关系;②查询2个几何对象的最小外接矩形的空间位置关系,即近似空间位置关系。

由于第2种方式的查询结果无法代表几何对象之间的真实空间关系,因此,本研究采用第1种方式。可构造SQL语句:“select * from table name where intersects(geom1 Geometry,geom2 Geometry)”,完成对空间数据的空间查询与分析,其中intersects为扩展的SQL函数,可利用sqlite3_prepare()执行上述语句,并将查询到的结果保存到sqlite3_stmt对象中。最后,利用sqlite3_step(stmt)命令可依次取出结果集中的每条记录,以供进一步的显示分析操作。

3.2 Spatialite API重构与应用开发

本研究以XCode4.6.1为开发平台,采用Objective-c开发语言,集成GNU iconv、Geos、PROJ.4以及FreeXL等开源类库,对Spatialite API进行重构、重编译,并在此基础上,根据实际业务功能需求,进行二次API设计与封装,包括查询分析、图层管理与配置(包括字段)以及系统管理等API接口与数据对象(图2)。最后利用二次封装的API接口,设计并实现了综合查询、POI查询、图层管理(包括书签、字段以及Shapefile的管理与配置)、地图标绘以及系统管理等,并重点解决了离线矢量数据的查询与分析,实现了在IPAD端对离线矢量数据的点击查询(Identify)与缓冲区分析以及结果展示,如图3、图4。

图2 业务逻辑框架接口

图3 综合查询

4 结 语

本文简要介绍了当前移动客户端调用空间数据的2种主要方式,并在了解掌握Spatialite空间数据库原理的基础上,提出了基于Spatialite解决移动客户端无法对离线地图数据进行查询分析操作的局限性。主要介绍了Spatialite GUI与命令行2种方式统一管理离线矢量数据,并基于原生的Spatialite API,进行重构、重编译,生成静态库,根据实际项目中的功能需求,基于该静态库进行二次API接口设计与封装,搭建数据业务逻辑层框架,实现了地图浏览、书签管理、地图标绘、快速定位、地图管理、综合查询以及空间查询等功能,解决了在移动客户端无法对离线矢量数据进行空间查询与空间分析操作的局限性。下一步的研究重点是进一步优化离线矢量数据的绘制与查询分析效率。

图4 空间查询分析

[1] 百度文库.ArcGIS移动客户端离线底图的几种解决方案[EB/ OL].http:// wenku.baidu.com /view/b265102eed630b1c59 eeb594.html,2014-05-16

[2] Wikipedia. SpatiaLite [EB/OL].http://en.wikipedia.org/wiki/ SpatiaLite,2014-05-18

[3] 李玲,王庆,王慧青.基于Spatialite轻量级空间数据库的GIS数据管理[J].地理信息世界, 2010,8(4):71-75

[4] 唐群,韦源生,劳景寮.利用Spatialite数据库处理宗地数据及GIS入库实现[J].桂林理工大学学报,2013,33(1):90-94

[5] 百度文库.R-tree [EB/OL].http://baike.baidu.com/view/5086047.htm?fr=aladdin, 2014-05-18

[6] OSGeo-Live.SpatiaLite快速入门 [EB/OL].http://live.osgeo.org/zh/quickstart/spatialite_ quickstart.html,2014-05-20

[7] GDAL.SQLite/Spatialite RDBMS [EB/OL].http://www.gdal.org/drv_sqlite.html,2014-05-20

P208

B

1672-4623(2015)02-0068-03

10.3969/j.issn.1672-4623.2015.02.025

陈俊明,硕士,研究方向为空间数据库管理。

2014-09-18。

项目来源:福建省科技厅产学研资助项目(2012Y4001);福建省测绘地理信息局局校合作资助项目(2013S17);福建省测绘地理信息局2013~2014年科技基金资助项目。

猜你喜欢

空间数据离线矢量
一种适用于高轨空间的GNSS矢量跟踪方案设计
矢量三角形法的应用
异步电机离线参数辨识方法
浅谈ATC离线基础数据的准备
GIS空间数据与地图制图融合技术
FTGS轨道电路离线测试平台开发
离线富集-HPLC法同时测定氨咖黄敏胶囊中5种合成色素
基于矢量最优估计的稳健测向方法
三角形法则在动态平衡问题中的应用
网格化存储的几项关键技术分析