以Google地图为基础的KML空间数据查询

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Google地图的KML空间数据查询

杨立法

西安邮电大学计算机学院,陕西西安,710121

摘要:给出KML空间数据查询的解决方案,并在基于Google地图建立的Web地理信息系统中予以实现。该方案采用Linq to XML方法实现KML属性查询,采用Net Topology Suite计算对象之间的拓扑关系,综合应用它们解决KML空间查询。基于此方案,在VS2010客户端开发了一套空间查询工具,包括点选、连选、区域选择、依属性选择、去选等。

引言

最近几年,由于Google地图的广泛应用,利用Google Maps API建立Web地理信息系统成为一种趋势,而Google设计的KML(Keyhole Markup Language)自然成为地理信息存储、传输和建模的首选格式。然而,Google地图并不像ArcGIS、MapInfo、Oracle Spatial等商业地理信息系统平台那样提供对自身数据库的管理和操作,它只提供对KML数据库的显示和简单查询,而KML数据库的其他操作,如添加、删除、修改、查询等,均需开发人员自行设计,这大大增加了基于Google地图的地理信息系统的建设难度。于是,有些作者把空间数据存储在SQL Server或Access等关系数据库中,只在需要显示时才把数据输出为KML格式并叠加显示在Google地图上[1,2],这样做就回避了对KML 数据库的直接操作,但系统功能、执行效率、开发成本、用户体验等都会受到很大影响。

KML是基于XML(eXtensible Markup Language)标准的地理标记语言,是GML(Geography Markup Language)的一个成功范例。XML操作的许多成功方法(如Microsoft XML DOM)完全可以用于KML,但这些操作方法只能处理文本和数字数据,不能进行拓扑分析和空间查询、和叠加计算等。文献[3,4]利用XPath和XQuery及JTS(Java Topology Suite)对GML空间数据查询进行了研究,所得结果不能用于KML空间查询。

本文作者致力于研究在Google地图上建立地理信息系统的开发技术,在文献[5]中研究了如何综合利用Google Maps API V3、KML、Ajax、Microsoft XML DOM等技术在Google地图上进行交互式制图。本文将进一步给出在VS2010环境中利用Linq to XML和NTS(Net Topology Suite)实现KML空间查询的解决方案。

1 技术基础

在以Google地图为基础建立的Web地理信息系统中,KML空间数据查询需要客户端和服务器端的协同操作,因此涉及多方面的技术,包括KML、Google Maps API V3(用于客户端显示KML数据)、Ajax技术(用于客户/服务器的通信)、jQuery技术(用于客户端用户界面处理)、Linq to XML(用于KML文档的查询和操作)、NTS(用于地理对象的拓扑计算和叠加操作)等。这里只简要介绍Linq to XML 和NTS。

1.1 Linq To XML

Linq (Language Integrated Query,语言集成查询)[6]是VS2008和.Net Framework 3.5引入的一组功能,可为C# 和Visual Basic 语言提供强大且简单易用的查询功能,可用于.NET Framework 集合、SQL Server 数据库、 数据集和XML 文档的查询。

Linq to XML是针对XML进行查询的编程接口,通过提供与SQL 相似的查询表达式,使XML查询变得更加简单。Linq to XML的文档对象模型类似于XML DOM,但优于DOM。Linq to XML 的查询

功能与XPath和XQuery具有可比性,但更容易使用。Linq to XML的核心功能集中在XElement 和XAttribute 对象以及from-where-select查询表达式。

KML基于XML标准,利用Linq to XML方法可以对KML文档进行各种查询和处理,但在操作时需要考虑KML命名空间的影响。Linq to XML可以与之前的XML DOM、XPath、XQuery等并存,但不要交叉使用。

1.2 NTS(Net Topology Suite)

Net Topology Suite[7]是开源软件JTS Topology Suite的C#/.net版本,遵循OGC发布的简单要素规范SFS(Simple Feature Specification for SQL),是符合OpenGIS标准的二维GIS分析、操作类库。在VS2010的开发项目中,可以利用NuGet程序包管理器在网络上直接抓取、安装Net Topology Suite程序集。

NTS列举的几何图形包括点(Point)、线(LineString)、面(Polygon)、多点(MultiPoint)、多线(MultiLineString)、多面(MultiPolygon)。

NTS基于扩展的九交模型(DE-9IM,Dimensionally-Extended 9 Intersection Matrix models)来计算几何对象间的拓扑关系,包括重合(Equals)、相离(Disjoint,无公共点)、相交(Intersects,至少有一个公共点)、相切(Touches,只在边界上至少有一个公共点,)、交叉(Crosses,有部分公共内点)、被包含(Within,几何体A完全处于B之内)、包含(Contains,B完全处于A之内)、重叠(Overlaps,A、B有公共点而非全部,且对象交集的维数与对象维数相同)。

NTS提供的叠加操作包括缓冲区(Buffer)、凸包(最小凸多边形)、交(几何对象A、B的公共点集合)、并(A、B所有点集合)、差(A内除去与B的公共点之外的点集合)及对称差(A、B内除去两者公共点之外的点集合)。

2 KML空间数据查询方案

假设KML文档具有图1所示的结构,其文件名为myData.kml,

相关文档
最新文档