基于Spatialite的空间数据组织管理与应用开发
2014-02-08关昆马骏杨晓峰肖康
关昆,马骏,杨晓峰,肖康
(天津市测绘院,天津 300381)
1 引言
SQLite是一种基于文件的轻型数据库产品,主要用于嵌入式应用领域。Spatialite是轻量级数据库SQLite具有空间数据支持扩展的产品,可以按照OGC标准存取空间数据。它在目前很多移动端地理信息工程项目中取得了广泛的应用,成为近年来GIS领域的研究热点之一,在可移植性、轻量级、数据处理速度等方面具有强大的优势,在普通WebGIS以及桌面应用中也具有广泛的市场前景。
除此之外,Spatialite能够跟很多程序语言相结合,比如C#、PHP、Java等,并具有ODBC开发接口。基于上述使用优势,本文开发了基于Spatialite的数据库管理与应用系统,通过对数据库API的调用,实现了矢量数据的入库、输出、编辑、管理等功能,满足轻量级GIS应用中对空间数据库的需求。
2 Spatialite空间数据库存储模型
2.1 Spatialite空间存储机制
Spatialite是一种基于文件的嵌入式数据库,它的存储方式只是一个文件,无需配置和安装,在运行速度和迁移性方面有着巨大的使用优势。它占用的资源非常低,被广泛应用在平板电脑、手机客户端等轻量级GIS应用中。
对于空间坐标信息的存储,Spatialite采用专门的表示地理坐标信息的空间字段实现,它包括采用平面直角坐标系的Geometry数据类型和采用地理坐标系的Geography数据类型。前者以平面坐标XY表示,后者以经纬度表示。
根据空间实体的不同,Spatialite支持若干空间数据类型:点(Point)、线(LineString)、面(Polygon)、点集合(MultiPoint)、线集合(MultiLineString)、面集合(Multi-Polygon)等,这几种不同类型的空间实体记录构成了复杂的空间信息数据。每一条空间记录根据空间引用标识(SRID)来对应其基于特定椭圆体的空间引用系统。
Spatialite采用元数据机制来更加高效地检索和管理地理空间数据。它的元数据表存储了空间数据的数据表名、空间字段名、空间实体的几何类型,坐标维数以及坐标参考信息等。Spatialite空间元数据由geometry_column和spatial_ref_sys两组表来实现。
2.2 Spatialite的空间索引
空间索引是支持空间扩展的数据库系统的关键技术,是快速高效查询、检索和显示地理空间数据的重要指标。其中比较常见的空间索引为网格空间索引、四叉树空间索引和R树(R-Tree)索引。目前主流的数据库产品多采用上述三类空间索引。
Spatialite通常采用R-Tree空间索引机制来提高空间检索和数据分析的速度,用户可以为不同的空间数据类型建立索引。建立索引时,R-Tree的每个节点包含一个矩形区域的索引码,该矩形区域由对应节点的所有子节点的最小包含矩形嵌套组成,因此,将要查询的几何图形用最小边界矩形来表示,便可以确定集合图形的空间范围。建立R-Tree索引可采用SQL扩展函数实现:
CreateSpatialIndex(TableName,ColumnName);
2.3 Spatialite的空间扩展SQL
Spatialite提供了一系列内置的空间扩展SQL函数来对空间数据进行操作。
(1)数据查询
Spatialite的Geometry字段默认以二进制的方式存储,它包含两种表述空间对象的标准方式:一个是WKT(the Well-Known Text)形式,另一个是 WKB(the Well-Known Binary)形式,该两种方式是OGC制定的空间数据的组织规范,WKB以二进制形式描述,WKT以文本形式描述,这两种形式都包括对象的类型信息和形成对象的坐标信息。
在Spatialite数据库中,可按照WKT格式展示空间数据:
Select AsText(GeometryColumn_Name)from TableName;
返回结果为对象的坐标信息,包括POINT、LINESTRING、POLYGON类型的坐标值。
(2)数据编辑
Spatialite同样采用符合OGC标准的基本SQL函数来对空间信息进行插入与编辑。
可通过GeomFromWKB将WKB格式的空间数据转换为可插入Geometry字段的信息;通过GeomFrom-Text将文本格式的空间数据转换为可插入Geometry字段的信息,插入到数据库中。如下语句在表 TableName中插入一条点记录,坐标为(118.2532,39.4783),SRID为4326,即在WGS84坐标系下插入一个点记录。
Insert into TableName(ID,Geometry)values(1,GeomFrom-Text(‘POINT(118.2532,39.4783,4326)’);
对于空间记录更新,同样采用GeomFromText方法,不同的是将SQL语句Insert改为Update。
(3)空间分析
Spatialite提供了常用的空间分析和计算方法,包括计算空间对象之间的距离、缓冲区计算、求两个对象之间的交点、计算长度、面积等等。方法包括Intersection、Distance、Area、Length 等。可以将空间分析计算方法与标注SQL函数统一使用,可以提高空间数据库的运算效率。
3 Spatialite空间数据库开发
3.1 数据库系统体系结构
系统在.Net环境下基于WPF框架实现,WPF是微软基于.Net的新一代用户界面框架,它提供了统一的编程模型、语言和框架,实现了分离界面设计人员与开发人员的工作。WPF本质属于桌面应用程序,可以方便地访问和开发局域网内的空间数据库。系统应用Esri WPF API实现基础底图的加载以及空间坐标查询结果的可视化加载,实现在系统中查看Spatialite空间表记录信息的位置的目的。如图1所示:
图1 Spatialite空间数据库管理系统开发路线
本文通过引用针对SQLite及其空间扩展的.Net Framework支持驱动,整合在统一的平台下,所引用的动态库包括:
(1)Spatialite:System.Data.SQLite.dll
(2)libspatialite-4.dll
对于SQLite通用的SQL语句开发功能,利用System.Data.SQLite库来完成;而对于Spatialite空间扩展SQL函数,需要利用libspatialite库来完成。
基于.Net的Spatialite空间数据库应用与管理系统实现了针对空间数据库的矢量数据入库、存储管理、数据浏览、编辑、输出功能,具备常用的地理信息工程所需要的数据库功能。通过对不同的矢量数据格式的读取,具备了多种矢量数据来源的数据库入库功能。其体系结构如图2所示:
图2 数据库管理应用系统体系结构
3.2 空间数据存储与输出
系统的矢量数据入库功能为Shapefile等各类矢量数据文件提供了向空间数据库的入库途径,利用Spatialite空间扩展SQL结合.Net API来完成,通过对不同格式的空间数据文件进行读取和分析的,调用SQlite SQL语句完成数据的插入、编辑等操作,流程如图3所示:
图3 矢量数据入库流程
矢量数据输出功能能够实现空间数据库中的表导出为所需要的矢量数据文件,应用.Net API,结合SQlite SQL语句查询所要输出的记录,再通过地理数据的创建、写入方法来完成数据输出流程。对于SHP格式的文件写入,通过 SharpMap类库来实现;对于DWG格式的文件写入,通过DWGDirect类库来实现;对于DXF和KML等文本格式的文件写入,直接通过.Net类System.IO来实现。流程如图4所示:
图4 矢量数据输出流程
3.3 数据可视化管理
平台对于矢量数据的浏览显示、编辑等操作,需要有基础地图的支撑。本文采用REST地图服务作为矢量数据管理的基础底图,基于Esri API的自适应性,REST地图来源可以有多种,无论是动态地图还是瓦片式地图,都可以加载到平台来使用。本文采用自定义的切片地图REST服务作为基础底图的使用。
对于空间坐标的读取结果,系统同样采用Esri WPF API的 Graphic类来实现,通过构建并指定Graphic的Geometry对象,将符号绘制在GraphicsLayer图层,实现所读取的点、线、面坐标的显示。
3.4 数据编辑
数据的编辑与管理模块包括几个部分:数据读取(Select)操作、数据更新(Update)操作、数据新增(Insert)操作。应用SQLite通用SQL语句,结合Spatialite空间扩展SQL函数,实现对空间数据的读取以及增删改操作。
在WPF环境下基于.Net框架,采用C#语言进行数据库开发示例如下:
(1)数据更新(Update)操作:
(2)数据新增(Insert)操作:
3.5 空间数据管理系统的应用
空间数据管理系统提供给使用Spatialite的GIS工程使用,它提供了将Shp、DWG等矢量数据文件导入数据库的功能,为GIS项目提供了数据建库的基础准备,并且可以进行常用的数据可视化管理、编辑和导出操作,为后台数据库的管理提供便利。
Spatialite空间数据库管理应用系统如图5所示:
图5 Spatialite空间数据库管理系统
4 结语
本文介绍了Spatialite空间数据库的特性,阐述了它的空间存储机制、空间索引以及空间扩展SQL函数方法,并结合SQLite通用SQL开发以及Spatialite空间扩展SQL函数,引用相应的动态库,开发了轻量级Spatialite空间数据库的管理应用系统。该系统基于微软WPF框架设计,是一个脱离第三方插件的独立应用,能够在移动端地理信息系统、轻量级地理信息应用项目中发挥简单实用的功能。随着地理信息在多个行业载体中得到越来越多的推广应用,本文为轻量级的应用领域提供了一个良好的解决方案。
[1]孙荣辉.基于Oracle+Spatial的空间数据一体化存储研究[D].北京:首都师范大学;2006.
[2] 庄云鹏.基于SQLITE的组态软件研究与设计[D].厦门:厦门大学;2008.
[3] 朱冰.多源空间数据集成技术及应用[J].测绘与空间地理信息,2011(6):138~139.
[4]李玲,王庆,王慧青.基于Spatialite轻量级空间数据库的GIS数据管理[J].地理信息世界,2010(4):71~75.
[5]胡伟.SQLite在嵌入式系统上的实现研究[J].计算机与数字工程,2009(2):158~163.
[6]蒋许锋,王少一,王刚.SQL Server Spatial应用开发研究[J].测绘与空间地理信息,2012(4):107~109.
[7]张会霞.基于SQL Server Spatial的空间数据的组织与查询[J].测绘与空间地理信息,2012(3):9~11.
[8]柳华桥,王光昇.轻量数据库Spatialite在AutoCAD中的应用[J].城市勘测,2013(5):46~49.