基于 SharpMap 的世界地图连续漫游研究与实现.doc

上传人:李主任 文档编号:3625579 上传时间:2019-09-18 格式:DOC 页数:7 大小:682.50KB
返回 下载 相关 举报
基于 SharpMap 的世界地图连续漫游研究与实现.doc_第1页
第1页 / 共7页
基于 SharpMap 的世界地图连续漫游研究与实现.doc_第2页
第2页 / 共7页
基于 SharpMap 的世界地图连续漫游研究与实现.doc_第3页
第3页 / 共7页
基于 SharpMap 的世界地图连续漫游研究与实现.doc_第4页
第4页 / 共7页
基于 SharpMap 的世界地图连续漫游研究与实现.doc_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《基于 SharpMap 的世界地图连续漫游研究与实现.doc》由会员分享,可在线阅读,更多相关《基于 SharpMap 的世界地图连续漫游研究与实现.doc(7页珍藏版)》请在三一文库上搜索。

1、精品论文基于 SharpMap 的世界地图连续漫游研究与实现刘力赟 北京邮电大学计算机科学与技术学院,北京(100876) E-mail:摘要: SharpMap 是一个可应用于桌面和 Web 程序的简单易用的 Map 渲染类库,它是基 于.Net 2.0 Framework 用 C#语言开发的。本文结合源代码对 0.9 版本 SharpMap 的体系架构 进行描述。采用世界国家地图文件渲染实例说明了 SharpMap 渲染 Shapefile 文件的机制。通 过研究 SharpMap 渲染机制,分析了 SharpMap 对于世界地图应用的特殊需求的不足,设计 了地图缝合技术,最后开发实现了世

2、界地图连续漫游的功能。 关键词:SharpMap;开放源码;视窗;连续漫游;地图缝合中图分类号:TP3171.引 言Unix 从 1969 年诞生,随后商业化导致自由软件的诞生,到 Linux 诞生并加入 GNU 成 为自由软件1运动的分水岭,最后,“开放源码软件”的概念在 1997 年由美国程序员 Eric Steven Raymond 在短文大教堂与市集(Cathedral and the Bazaar)中被提出2。10 多年 来,开源社区规模加速扩大,涌现出了大量优秀开源的软件,如:Apache,Linux,Mozilla, Ubuntu。开源软件打破了商业软件的局限性,并在互联网的发展

3、的推动下,在全世界范围合作团 体和社区中发展。开源软件朝着更高质量、更稳定、更可靠的方向发展。基于开源软件产品, 缩短了开发者定制本地化软件的周期,更加灵活、有效。本文介绍的 SharpMap 项目3是一个基于.Net2.0 FrameWork 用 C#语言开发的开源的 GIS 引擎项目。本文结合源代码描述了 0.9 版本的 SharpMap 的体系架构。用世界国家地图实例 说明了渲染 Shapefile 文件的机制。通过研究 SharpMap 渲染机制,分析了对于世界地图应用 的特殊需求的不足,设计了地图缝合技术,最后开发实现了世界地图连续漫游的功能。2.SharpMap 介绍2.1 Sha

4、rpMap 概要SharpMap 是一个可应用于桌面和 Web 程序的简单易用的 Map 渲染类库,它基于.Net 2.0Framework 用 C#语言开发,以 GNU LGPL(Lesser General Public License)4授权协议发布。 目前的稳定版本为 0.9(2.0 版本正在开发),本文就是基于 0.9 版本进行研究。SharpMap 实现了如下功能:支持渲染包括:ESRI Shape、PostGreSQL/PostGIS、OLEDB(points only)、Microsoft SQL Server 等 Vector 数据格式,以及 WMS Servers 数据格式

5、,并且通过第三方扩展可渲染更多 Vector、Raster 类型的 GIS 数据格式。SharpMap 提供了空间索引技术搜索图元数据。 支持的数据格式:Vector 数据包括:ESRI Shape files format,PostGreSQL/PostGIS,OLEDB(points only),Microsoft SQL Server;WMS Servers;通过第三方扩展支持其它多种 Vector 数据格式和栅格数据格式(这一部分不发布 在 0.9 版本中)。- 7 - Windows Forms 控件 MapImage,使桌面应用更加简单,提供基本的放大、缩小、移动、标尺等基本地图操

6、作工具。 通过 HttpHandler 支持 ASP.net 程序,在 Web 中实现地图渲染。 提供点、线、多边形、多点、多线和多多边形等几何类型和几何集合等 OpenGIS Simple Features Specification。 可通过 Data Providers(增加数据类型支持)、Layer Types(增加层类型)和 GeometryTypes 等扩展。 图形使用 GDI+渲染,支持 anti-aliased 等,使地图渲染效果更加漂亮。 专题图,用户可以灵活定制本地化需求的地图。2.2 SharpMap 体系结构Display ViewsMapImageCustom Vie

7、wMapStandard ToolsZoom, Pan, QueryCustom ToolsPresentationGeometryRendereLabelRendererCustomRenderer ThemingCustomVectorRendererFeature LayersVectorLayer LabelLayerTiledWmsLayerFeaturesThemeReprojection(ProjNET)ICoordinateSystem And IGeometryTransformGeometryFeatureDataSetIProviderGeospatialDatabase

8、File-Based DataShapefilesOLE-DB(only points)WMS/WFS HostsWeb-based data and maps图 1 SharpMap Relase0.9 体系结构图图 1 是 0.9 版本的 SharpMap 体系结构图,主要由:IProvider,Features,Feature Layers, Presentation, Reprojection, Map,Display Views 七层组成。下面结合源代码结构分别介绍这七 层:2.2.1 IProvider 层GIS 引擎底层数据接口层,为 SharpMap 提供数据读(写)支持。通过

9、面向接口的设计, 奠定了 SharpMap 增加各类数据格式的灵活性基础。Providers 名称空间,包括了 IProvider 接口和 Shape 文件、PostGIS 数据的读取实现。2.2.2 Features 层几何图元特征层,通过 IProvider 接口层读取的 GIS 数据都转化为点、线、多边形、多 点、多线和多多边形等几何类型和几何集合等 OpenGIS Simple Features Specification。Geometries 命名空间,包括了 SharpMap 要使用到的各种几何类及其接口类,例如点、 线、面等类。是 SharpMap 的基础之一,所有几何对象都继承

10、自 Geometry 这个抽象类,其 中定义了几何对象应该具备的公共操作,例如大小、ID、外接矩阵、几何运算等等。2.2.3 Feature Layers 层特征图元图层层,组织各种几何图元,结合 Reprojection 实现各种坐标空间的图元投影。Layers 命名空间,提供各种图层支持,包括注记层、矢量层等。Layer 是一个抽象类, 实现了 ILayer 接口,Layer 目前有 4 个子类,分别是 VectorLayer,LabelLayer, TiledWmsLayer 和 WmsLayer,分别代 4 种不同数据类型的图层。通过 LayerGroup 实现图层的分组管理。2.2.

11、4 Presentation 层 表现层,也叫渲染层,实现各种矢量图元渲染,并且通过图形图像特殊样式实现主题图渲染。Rendering 命名空间,目前包括矢量渲染器类和几个专题图渲染器类,这些类可以将几 何对象根据其 Style 设置渲染为一个 System.Drawing.Graphics 对象。2.2.5 Reprojection 层 投影层,能够将图元从原坐标空间投影到指定坐标空间,展现不同的视角。例如:将世界地图空间坐标系图元通过笛卡尔投影,展现成二维平面的我们平时常见的纸质世界地图。在 SharpMap 中,投影层采用了另外一个开源项目 Proj.Net5,是一个基于.Net 的空间

12、索 引及坐标转换引擎。2.2.6 Map 层Map 层提供地图图像的基本操作工具,开发者也可定制需要的工具。 这一层只有一个 Map 类。2.2.7 Display Views 层为了方便开发者进行桌面和 Web 程序开发,SharpMap 在 Display Views 层分别提供了桌 面控件、Web 控件,同时用户可以自由定制自己的控件。Forms 命名空间,包含 MapImage 桌面应用控件,一个简单的 User Control(用户控件), 封装了 Map 类,用于 Windows Form 编程。Web.UI.Ajax 命名空间,包含 AjaxMapControl Web 应用控件

13、,并且提供对 Ajax 支持。2.3 Shapefile 渲染2.3.1 Shapefile 介绍Shapefile 是一种美国 ESRI 公司开发的空间数据开放格式。目前,该文件格式已经成为 了地理信息软件界的一个开放标准。Shapefile 将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几 何对象存为以坐标点集表示的图形文件SHP 文件,Shapefile 文件并不含拓扑(Topological) 数据结构。一个 Shape 文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个 dBASE(*.dbf)表。主文件是一个直接存取,变长度记录的文件

14、,其中每个记录描述构成一个 地理特征(Feature)的所有 vertices 坐标值。在索引文件中,每条记录包含对应主文件记录 距离主文件头开始的偏移量。dBASE 表包含 SHP 文件中每一个 Feature 的特征属性,表中 几何记录和属性数据之间的一一对应关系是基于记录数目的 ID。在 dBASE 文件中的属性记 录必须和主文件中的记录顺序是相同的。图形数据和属性数据通过索引号建立一一对应的关 系。2.3.2 SharpMap 中 Shapefile 渲染机制本节通过世界地图国家渲染为实例,阐述 SharpMap 如何渲染 Shapefile 地图数据。主要 思想是:读取地图数据文件,

15、解析图元信息,进行相应投影坐标变换,最后生成图片展现出 来。步骤如下:a.创建地图,创建图层,代码示例:SharpMap.Map map = new SharpMap.Map(size);/ 初始化创建一个 size 大小的地图SharpMap.Layers.VectorLayerlayCountries=newSharpMap.Layers.VectorLayer(Countries);/ 新建一个国家图层layCountries.DataSource=new SharpMap.Data.Providers.ShapeFile(App_datacountries.shp, true);/ 设

16、置国家图 层的数据源为 App_data 目录下的 countries.shp Shapefile 文件b.基本的图层显示设置,配置图层中图元显示效果,代码示例:layCountries.Style.Fill = new SolidBrush(Color.Green); / 设置国家图层填充色为绿色layCountries.Style.Outline = System.Drawing.Pens.Black; / 设置国家边界线颜色为黑色layCountries.Style.EnableOutline = true;/ 设置显示国家边界线layCountries.SRID = 4326;c.将图

17、层加入图层到地图,地图可由多个图层组成,后加入图层渲染时叠加在先加入 的图层上,代码示例:map.Layers.Add(layCountries);d.地图放缩、背景、中心等设置,配置地图显示的比例、初始显示区域,代码示例:map.MaximumZoom = 360; / 设置地图最大可视水平经度区域,单位为度map.BackColor = Color.LightBlue; / 设置地图背景颜色map.Zoom = 360;/ 设置地图初始可视水平经度区域,360 显示整个世界地图map.Center = new SharpMap.Geometries.Point(0,0); / 设置初始显示

18、地图中心坐标e.地图渲染,获取可视区域的几何图元,即所有国家边界多边形;先绘制外框,即国家边界;在绘制多边形内部区域,即填充颜色。代码示例:map.GetMap();f.渲染效果图如图 2,地图中心坐标是(0,0),两侧边界分别是东经 180 度、西经180 度:图 2 世界地图渲染效果图3.世界地图连续漫游研究与实现地球表面是连续的,东经 180 度线和西经 180 度线是重合的。在世界电子地图应用中, 我们希望能够表现这种连续性,即在拖动地图左右平移的时候地图能够像转动地球仪一样显 示连续的地图区域。目前 SharpMap 作为一个 GIS 引擎并没有支持这种针对世界地图的特殊应用。所以当

19、平 移地图时,只能显示一张平面世界地图,不能连续显示,如图 3 显示。图 3 不连续的世界地图下面根据 SharpMap 地图渲染的机制,研究并实现世界地图连续漫游。3.1 SharpMap 地图渲染机制分析研究表明,SharpMap 世界地图渲染的过程是: 第一步、以应用程序窗口作为视窗,获取可视区域的几何图元; 第二步、依据坐标系投影,绘制获取的图元; 第三步、生成视窗区域图片显示。SharpMap 投影地图视窗(a)(b)(c)图 4 SharpMap 世界地图呈现图示如图 4 显示,固定大小视窗在投影地图上的移动过程时的区域即为我们在窗口看到的地图,当视窗移动超过边界时即产生地图不连续

20、的效果。 如何消除这种效果呢?下面介绍地图缝合方法,实现地图连续漫游。3.2 地图缝合当视窗移出投影地图边界时,从 180 经度边界线将视窗分成两个部分:左视窗、右视窗, 分别以两个视窗绘制地图,然后将两个图片缝合形成整体视窗地图,如图 5 显示示意图。LCenterRCenterLWidthRWidth=Width-LWidth图 5 地图缝合示意图修改了 SharpMap.Map.GetMap()方法,判断超出边界时进行地图缝合:System.Drawing.Image LImage, RImage; LImage = GetMap(LCenter);RImage = GetMap(RCe

21、nter);System.Drawing.Image ViewImg = new System.Drawing.Bitmap(this.Size.Width, this.Size.Height);System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(ViewImg);g.Transform = this.MapTransform;g.Clear(this.BackColor);g.PageUnit = System.Drawing.GraphicsUnit.Pixel;g.DrawImage(LImage, 0, 0, ne

22、w System.Drawing.RectangleF(0, 0, LWidth, Size.Height), g.PageUnit);g.DrawImage(RImage, LWidth, 0, new System.Drawing.RectangleF(LWidth, 0, RWidth, Size.Height), g.PageUnit);g.Dispose(); LImage.Dispose(); RImage.Dispose();重载方法 GetMap(Point center),实现指定视窗中心进行投影。这样当视窗跨越经度 180度线时,通过两次投影生成图片再进行缝合实现了世界地图

23、连续漫游。4.结论本文介绍了一个 GIS 引擎开源项目SharpMap,结合源代码阐述了 SharpMap 的体系 结构,描述了 SharpMap 渲染 Shapefile 文件的机制。针对世界地图应用的特殊需求,本文在 SharpMap 基础上,遵循开源授权协议规则,设计了地图缝合技术实现了世界地图连续漫游 功能。在进行本地开发过程中,会遇到更多的特殊需求,而在开源环境下,SharpMap 越来 越健壮,提供给第三方开发很好的灵活性。本文作者愿意将针对本地功能开发的源码公布, 也为开源软件事业添砖加瓦。5.致谢感谢在项目开发过程中给予我帮助与支持的老师、同学们。感谢给予我启发性建议的Shar

24、pMap 开源项目开发者 codekaizen。参考文献1共创软体开放源码(Open-Source)和自由软件(Free Software)回顾Internet:共创软件,2002(9):74-78. 2Alexe.开源的光荣与梦想一一追根溯源看开源.软件世界,2006(7):16-18.3 JohnDiss,Justsomehandle,Pauldendulk,etal.SharpMap - Geospatial Application Framework for theCLR.http:/ GNU Lesser General Public License - GNU Project -

25、Free Software Foundation(FSF).http:/www.gnu.org/licenses/lgpl.html,2008.5 D_Guidi,SharpGIS,Codekaizen ,etal. Proj.Net.http:/ Design and Research of Wrapping Pan in World MapBase on SharpMapLiu LiyunDepartment of Computer Science and Technology,Beijing University of Post andTelecommunication, Beijing

26、(100876)AbstractSharpMap is an easy-to-use mapping library for use in web and desktop applications. The engine iswritten in C# and based on the .Net 2.0 framework. Combining with source code, this paper presents the architecture of SharpMap, which stablely releases 0.9. In order to explain the mecha

27、nism of rendering Shapefile data file in SharpMap, a sample of steps to render world countries is provided. After analysing the mechanism of rendering, this paper designs a method, which resolves the problem of missing feature of wrapping pan in world map, named map stitch.Keywords: SharpMap; Open-Source; View; Wrapping Pan; Map Stitch

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1