基于.NET2.0的GIS开源项目SharpMap分析手记精品资料.doc
《基于.NET2.0的GIS开源项目SharpMap分析手记精品资料.doc》由会员分享,可在线阅读,更多相关《基于.NET2.0的GIS开源项目SharpMap分析手记精品资料.doc(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于.NET 2.0的GIS开源项目SharpMap分析手记(一)SharpMap介绍: SharpMap是一个“小巧可爱”的基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。 其网址为:http:/sharpmap.iter.dk/ 和SharpMap的发布许可(License)为GNU General Public License,开发者为Morten Nielsen(http:/www.iter.dk/)。目前的稳定版本为0.8(9.0beta已发布),代码行数近10000行,实现了以下
2、功能:支持的数据格式:PostGreSQL/PostGIS,ESRI Shapefile支持WMS layers支持ECW 和JPEG2000 栅格数据格式Windows Forms 控件,可以移动和缩放通过HttpHandler支持ASP.net程序点、线、多边形、多点、多线和多多边形等几何类型和几何集合(GeometryCollections)等OpenGIS Simple Features Specification可通过Data Providers(增加数据类型支持)、Layer Types(增加层类型)和Geometry Types等扩展图形使用GDI+渲染,支持anti-alias
3、ed等专题图上面这段话是根据马兄的BLOG整理的,如果不希望我引用请马兄告知我删除。下面就是实用的STEP BY STEP。(1)下载VS .NET 2005由于SharpMap基于.NET 2.0,为了分析SharpMap,首先要作的就是下载一个VS .NET 2005,这个比较大,估计有1.6G,所以建议找个速度快点的网站或者(2)安装VS .NET 2005还算比较好装,我装的时候没碰到什么问题,一次成功;(3)设置IIS ASP.NET为2.0这点必须注意,因为默认的IIS ASP.NET为1.1(我安装操作系统的是Windows Server 2003);做法是打开IIS信息服务管理
4、器,在“默认网站”上单击右键选择“属性”,弹出如下对话框,在ASP.NET页设置ASP.NET的版本为2.0.50727;(4)下载SharpMap到(5)解压和试运行解压后可以看到一个demo文件夹,在VS 2005中打开Simple.aspx,在VS 2005中单击右键,选择“在浏览器中查看基于.NET 2.0的GIS开源项目SharpMap分析手记(二):源代码解压下载的0.9版源代码,有两个文件夹:SharpMap和SharpMap.UI。其中SharpMap.UI是用户界面相关命名空间,如窗体Forms、Ajax等。SharpMap工程是主体,包括数据转换、坐标、数据、几何体、图层等
5、命名空间,下面分别介绍:SharpMap命名空间,包括Map类,通过创建Map对象的实例来生成地图。Map对象由包含Layer对象组成Layers集合,通过GetMap方法来Render地图。Converts命名空间,提供数据转换服务。CoordinateSystems命名空间,提供坐标系统及其投影和转换。Data命名空间,提供对各种数据支持,现在包括MSSQL和ShapeFile支持。Providers名称空间,包括了IProvider接口和Shape文件、PostGIS数据的读取实现。该名称空间为SharpMap提供数据读(写)支持,通过面向接口的设计,可以比较容易的增加各类数据格式。Ge
6、ometries命名空间,包括了SharpMap要使用到的各种几何类及其接口类,例 如点、线、面等类。是SharpMap的基础之一,所有几何对象都继承自Geometry这个抽象类,其中定义了几何对象应该具备的公共操作,例如大小、 ID、外接矩阵、几何运算等等。Layers命名空间,提供各种图层支持,包括注记层、矢量层等。Layer是一个抽象类,实现了ILayer接口,Layer目前有3个子类,分别是VectorLayer、LabelLayer和WmsLayer,分别代3种不同数据类型的图层。Rendering命名空间,目前包括矢量渲染器类和几个专题图渲染器类,该类可以将几何对象根据其Style
7、设置渲染为一个System.Drawing.Graphics对象。Styles命名空间,该命名空间主要提供了图层的样式设置类,例如线样式、点样式、填充样式等。Utilities名称空间包括Algorithms类(目前仅实现了一个方法);Providers类,是Provider的一个Helper,应用了反射机制;Surrogates主要用于系统的Pen和Brush的序列化;Transform提供了从图片坐标到地理坐标的互相变换,也即桌面GIS的二次开发中经常使用的屏幕坐标和地理坐标的转换,主要用于地图的渲染、交互操作等。Utilities.SpatialIndexing用于对象的空间索引。Web
8、名称空间实现了HttpHandler和Caching类,用于网络环境。Web命名空间,包括对网络支持如HTTP等,Web.Wms提供对WMS的支持。SharpMap.UI工程包括:Forms名称空间,包含MapImage控件,一个简单的User Control(用户控件),封装了Map类,用于Windows Form编程。Web.UI.Ajax提供对Ajax支持。基于.NET 2.0的GIS开源项目SharpMap分析手记(三):地图渲染分析1 运行过程 我们通过实例来讲述SharpMap的运行过程和渲染(绘制)机制。首先打开Simple.aspx,可知此页面有一组单选框(3个,分别是放大、缩
9、小和漫游)和一个图像按钮,用于显示地图。它的代码在Simple.aspx.cs中。打开Simple.aspx.cs,在Page_Load函数中是页面初始化代码。可知地图生成分两步:1.1 初始化地图myMap = MapHelper.InitializeMap(newSystem.Drawing.Size(int)imgMap.Width.Value,(int)imgMap.Height.Value);我们找到MapHelper.InitializeMap函数,发现地图的初始化分为以下几步:(1)创建地图,创建图层/Initialize a new map of size imagesizeS
10、harpMap.Map map = new SharpMap.Map(size);/Set up the countries layerSharpMap.Layers.VectorLayer layCountries = new SharpMap.Layers.VectorLayer(Countries);/Set the datasource to a shapefile in the App_data folderlayCountries.DataSource = newSharpMap.Data.Providers.ShapeFile(HttpContext.Current.Server
11、.MapPath(App_datacountries.shp), true);(2)基本的图层显示设置/Set fill-style to greenlayCountries.Style.Fill = new SolidBrush(Color.Green);/Set the polygons to have a black outlinelayCountries.Style.Outline = System.Drawing.Pens.Black;layCountries.Style.EnableOutline = true;layCountries.SRID = 4326;(3)加入图层到地图
12、/Add the layers to the map object./The order we add them in are the order they are drawn, so we add the rivers last to put them on topmap.Layers.Add(layCountries);map.Layers.Add(layRivers);map.Layers.Add(layCities);map.Layers.Add(layLabel);map.Layers.Add(layCityLabel);(4)地图放缩、背景、中心等设置/limit the zoom
13、 to 360 degrees widthmap.MaximumZoom = 360;map.BackColor = Color.LightBlue;map.Zoom = 360;map.Center = new SharpMap.Geometries.Point(0,0);1.2 绘制并生成地图我们回到Simple.aspx.cs的Page_Load函数,发现下一步调用GenerateMap();/This is the initial view of the map. Zoom to the extents of the map:/myMap.ZoomToExtents();/or cen
14、ter on 0,0 and zoom to full earth (360 degrees)/myMap.Center = new SharpMap.Geometries.Point(0,0);/myMap.Zoom = 360;/Create the mapGenerateMap();在同一文件中,GenerateMap()包含以下两步:(1)保存当前地图状态/Save the current mapcenter and zoom in the viewstateViewState.Add(mapCenter, myMap.Center);ViewState.Add(mapZoom, my
15、Map.Zoom);(2)渲染地图/Render mapSystem.Drawing.Image img = myMap.GetMap();string imgID = SharpMap.Web.Caching.InsertIntoCache(1, img);imgMap.ImageUrl = getmap.aspx?ID= + HttpUtility.UrlEncode(imgID);它的核心就是通过myMap.GetMap()创建了一个地图图片。我们来看看这个GetMap()函数。在Map.cs文件中找到GetMap()函数,它分为以下几步:创建图像,得到图像绘制环境参数System.Dr
16、awing.Image img = new System.Drawing.Bitmap(this.Size.Width, this.Size.Height);System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img);g.Transform = this.MapTransform;g.Clear(this.BackColor);g.PageUnit = System.Drawing.GraphicsUnit.Pixel;绘制图层int SRID = (Layers.Count 0 ? Layers0.SRID : -1)
17、; /Get the SRID of the first layerfor (int i = 0; i = this.Zoom & _Layers.MinVisible this.Zoom)_Layers.Render(g, this);关键在于_Layers.Render(g, this),它是ILayer接口的一个函数,我们找VectorLayer的实现来看看,它分为两种,一种是专题地图,一种是非专题地图绘制。对于专题地图,它针对SharpMap.Data.FeatureDataTable的每一 个feature进行绘制,先绘制其外框,再绘制内部几何体。对于非专题地图,它针对 this.D
18、ataSource.GetGeometriesInView(envelope)得到的几何体进行绘制,也是先绘制其外框,再绘制内部几何体。最后的绘制工作都调用SharpMap.Rendering.VectorRenderer类的函数完成。 SharpMap.Rendering.VectorRenderer类包含绘制注记、线串、多线串、多点、多多边形、点、多边形等。绘制好图层后将激发LayerRendered事件:if(LayerRendered!=null) LayerRendered(this, g); /Fire event绘制好地图后将激发Map类的MapRendered 事件:if (M
19、apRendered != null) MapRendered(g); /Fire render event2SharpMap.Rendering.VectorRenderer的各个函数具体分析现在我们对渲染地图的全过程已经有了个总体概念和初步理解,下面来具体看一下SharpMap.Rendering.VectorRenderer的各个函数:2.1 DrawLabel / / Renders a label to the map. / / Graphics reference / Label placement / Offset of label in screen coordinates /
20、 Font used for rendering/ Font forecolor / Background color / Color of halo / Text rotation in degrees / Text to render / Map referencepublic static void DrawLabel(System.Drawing.Graphics g, System.Drawing.PointF LabelPoint, System.Drawing.PointF Offset, System.Drawing.Font font, System.Drawing.Colo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于.NET2.0的GIS开源项目SharpMap分析手记 精品资料 基于 NET2 GIS 项目 SharpMap 分析 手记 精品 资料
限制150内