我喜欢GIS二次开发,即使有的人看不起;我不懂开源GIS,只会点商业的GIS,有的人更加瞧不起。我认为,我不能改变现实这个环境,但可以创造一些价值。找到一本《GIS软件ShapMap源码详解及应用》来学习,我倒要看看开源GIS是什么样子。
当前GIS软件有商业GIS系统及开源GIS系统之分。GIS商用软件功能强 大,有完善的技术支持,提供封装好的、功能强大的类库,基于商用GIS库进 行的二次开发效率高、难度低、资源丰富。但对于小型GIS开发人员,商用 GIS价格过高,对于GIS学习者来说,由于商用GIS产品的源代码是保密的, 无法深入学习GIS底层技术,开发技术含量低,难以深化对GIS的理解;而开 源GIS是完全免费的,其源代码完全公开,可作为非商业用途使用,是开发小 型GIS系统或GIS开发人员学习的宝贵资料。但开源GIS项目的帮助资料通常 很少,且没有强大的技术支持。此外在众多GIS开源代码中,C语言及Java平 台的项目居多,.NET平台的GIS开源项目较少。SharpMap是基于.NET 2. 0平 台用C#语言开发的GIS开源项目,是一套简单易用的小型GIS平台,扩展性 强,可以用于开发网络或桌面GIS应用程序。它支持多种GIS数据格式,支持 空间查询,可渲染出精美地图。(摘自《GIS软件SharpMap源码详解及应用》前言)。
第一章是概述,很多书都是这样子的,如果是我写一本书,先来动手教大家一实例,先不讲什么理论和介绍,可是我没有写书。
1. 1????SharpMap 的特性
SharpMap具有以下特性:
⑴核心特性。
1) 支持多种.NET开发语言,包括C#、VB. NET、C ++/CLI和J#等;我不认为会某种言语就有多了不起,不管哪种语言,精通后,都能解决问题。
2)使用属性数据作为注记;这就是ArcGIS是的注记功能吧,其他软件我不知道,ArcGIS的注记功能是相当强大的。
3)符合 OpenGIS 的简单要素规范(OpenGISSmple Features Specification),支持点、 线、面、多点、多线、多面、几何对象集合等要素类型;我不应该把ArcGIS与其他进行比较,毕竟性质不一样,但我又不了解开源GIS。
4)支持地图旋放及平移;这不是地图浏览的基本操作吗?
5)可使用代理(delegates)编制复杂主题地图;好像很高级,都有代理了。可能与制图表达相似。
6)能实时投影。是ArcGIS中的动态投影吗?
(2)网络地图。(这一块不怎么懂,只做过Flex+ArcGIS Server地图)
1)支持使用Http Handler生成地图;
2)支持AJAX地图控件;
3)支持WMS1.3.0服务。
(3)扩展功能。
1)支持数据格式扩展;
2)支持图层扩展。
这些特性和功用,只有在深入学习后才能深入体会。
1. 2????SharpMap支持的GIS数据格式
SharpMap支持的GIS数据格式包括矢量数据格式、栅格数据格式以及WMS (网络地图服务)格式。
矢量数据格式有:ESRI Shape files format、PostGreSQL/PostGIS、OLEDB (points on-ly)、Microsoft SQL Server、Oracle *、GPX *、Maplnfo File *、TIGER *、S57 *、DGN *、 CSV *、GML *、Interlis 1 *、Interlis 2 *、SQLite 和 ODBC *。
概格数据格式有:Arc/Info ASCII Grid *、Arc/Inf。Binary Grid (.adf) *、Microsoft Windows Device Independent Bitmap (. bmp) *、ESRI ? hdr Labelled *、ENVI ? hdr Labelled Raster *、Envisat Image Product (. nl)????*、Graphics Interchange Format (? gif)????*、GMTCompatible netCDF * ^ GRASS Rasters * > TIFF/GeoTIFF ( . tif)????*、Erdas Imagine(.img) *、Idrisi Raster *、Image Display and Analysis ( WinDisp ) *、JPEG JFIF (.jpg) *、JPEG2000 (.jP2, .j2k) *、JPEG2000 (.jP2, .j2k) *、JPEG2000 (.jP2,.j2k) *、JPEG2000 (.jp2, .j2k) *、Erdas 7.x .LAN and .GIS *、Daylon Leveller Heightfield * v In Memory Raster * N NetCDF * N PCI . aux Labelled * N PCI Geomatics Database File * , Portable Network Graphics (. png)????*、RadarSat2 XML ( product, xml)????*、USGS SDTS DEM ( CATD. DDF) *、Raster Matrix Format (? rsw,? ratw) * x SGI Image Format * , USGS ASCII DEM (. dem) * 和 XI1 Pixmap (. xpm) * 等。
WMS (网络地图服务)格式有:Version 1.0.0、Version 1. 1.1、Version 1.3. 0。网络 地图服务(Web Map Service,WMS)是从地理信息动态产生,具有地理空间位置数据的 地图。地图本身并不是数据,WMS产生的地图一般以图像格式提供,如PNG、GIF或 JGPE;或按 SVG (Scalable Vector Graphics)或 Web CGM (Web Computer Graphics Meta-file)格式提供基于矢量的图形元素。
我只接触过几个常规的格式,有的格式甚至听都没听说过,我想,以后也很难遇到吧。
1.3????SharpMap名称空间概述
命名空间是非常重要的,是对它的宏观把握。
(1) SharpMap名称空间只有一个类(Map类),也是SharpMap的核心。
(2) Converts名称空间提供数据转换服务。
(3) Forms名称空间用于Windows Form编程,包含Maplmage控件。Maplmage空间是 一个简单的User Control (用户控件),用于表达Map对象。
(4) Geometries名称空间包括了 SharpMap要使用到的各种几何类及其接口类,例如 点、线、面等类,是SharpMap的基础之一。所有几何对象都继承自Geometry这个抽象 类,其中定义了几何对象应该具备的公共操作,例如大小、ID、外接矩阵、几何运算等。
(5) Layers名称空间包括了 ILayer接口、Layer集合类等,代表地图的图层。Layer是 一个抽象类,实现了 ILayer接口Layer目前有3个子类,分别是VectorLayer、LabelLayer 和WmsLayer,分别代表3种不同数据类型的图层。
(6)Data名称空间包含了与空间要素相关的类,如FeatureDataSet、FeatureDataTable、 FeatureDataRow s FeatureTableCollection
(7)Data. Providers名称空间包括了 IProvider接口和Shape文件、PostGIS数据访问实 现代码。该名称空间为SharpMap提供数据读(写)支持,通过面向接口的设计,可以方 便地扩展各类数据格式。
(8)Rendering名称空间用于提供绘制空间数据的功能,目前包括矢量绘制对象和几个 专题图绘制对象,该类将几何对象根据其Style设置,绘制到System Drawing. Graphics对象上cj
(9)Styles名称空间主要提供了图层的样式类,例如线样式、点样式、填充样式等。
(10)Utilities名称空间包括Algorithms类(目前仅实现了一个方法)、Providers类(是数据 提供对象Provider的一个Helper类,应用了反射机制)Surrogates类(主要用于系统的Pen和 Brush的序列化)、Tramf〇rm类(提供了从图片坐标到地理坐标的互相变换,即桌面GIS的二次 开发中经常使用的屏幕坐标和地理坐标的转换,主要用于地图的渲染、交互操作等)。
(11 ) Utilities. Spatiallndexing名称空间用于对象的空间索引。
(I2) Web名称空间实现了 HttpHandler和Caching类,用于网络环境D Web. UI.Ajax 提供对Ajax的支持。
不知道为什么,这些名称空间很好理解,或许是之前接触过ArcGIS的命名空间,所以有一种熟悉感觉生成的假象。
1.4????SharpMap中用到的第三方库
SharpMap中用到的第三方库如下:
(1) ProjNET。这是一套基于微软.NET2.0的开源地图投影库,支持基准面转换;支 持大地坐标系、地心坐标系以及投影坐标系。其网址为:http: //projnet. codeplex.com/。
(2) BruTile。这是一套C#i吾言开发的支持GIS瓦片(tile)数据服务的开源代码库。 其网址为:http: //brutile. codeplex. com/。
(3)????NetTopologySuite。这是一套快速、可靠的基于.NET的平台,用于处理GIS空间 数据的拓扑关系,支持对二维线性几何形状进行拓扑运算。其网址为:http: //code, google, com/p/nettopology
(4 ) nunit. framework。这是一套基于.NET的单元测试平台。其网址为: www. nun it. org/
这此都是后绪的,先把SharpMap熟悉一下。
1.5????SharpMap源代码下载????
打开网站 http: //www.codeplex.com/SharpMap,在 "Source Code" 页面下,是项目 各个版本的列表,显示各个版本的更新集编号(Change Set)、发布日期、下载次数以及 更新说明。点击页面右边"Latest Version"文字下的链接Download,可下载最新的项目打 包文件。页面中点击更新集编号,可下载相应版本。下载后文件名为sharpmap - x x x x x.zip,其中x x x x x是一个5位数字,表示当前下载文件的更新号。本书使用版本的 更新集编号是78712,这是一个较稳定的版本,会与最新版有所不同,请读者注意。
下载的压缩文件中,有三个目录:一个是Branches,为SharpMap的一些分支版本; 一个叫BuildProcessTemplates,是一些预定义的项目编译模板;第三个目录Trunk,是包含 项目代码的主目录,也是本书讲述的内容。
Trunk 目录下,有三个 Visual Studio 项目文件,即 SharpMap. sin、SharpMap. VS2008. sin、 SharpMap. VS2010. sin,分别对应 Visual Studio 2005、Visual Studio 2008、Visual Studio 2010 三个版本。本书使用的是SharpMap. VS2010. sin,建议使用VS2010。
Trank目录还包含如下子目录:
(1)????ExtemalReferences。它是项目用到的第三方库文件。
(2)????SharpMap。它是核心项目,包括 Map、Layer、Data、Geometries、Rendering、 Style等主要内容。
(3)????SharpMap. UI。它包括地图控件。
(4)????SharpMap. Extensions。它包括一些数据、图层扩展对象。
(5)????UnitTests。它用于管理单元测试。
(6 ) SharpMap. SqlServerSpatialObjects。空间数据库,底层使用 MS SQL Server 的空间 对象机制。
(7)????PostgisDemoDb、MsSqlSpatialDemoDb。它们是使用 PostGIS、MsSqlSpatila 空间数 据库的例子项目。
(8)????DemoWebSite、DemoWinForm、WinFormSatnples。它们是三个综合实例,第一个 为Wet)应用,其他两个为桌面系统。
(9)????ExampleCodeSnippets。它是 SharpMap 的代码段项目。