WebGIS由于技术发展和功能定位的原因,一般在进行架构设计的时候更多地考虑是否容易实现、用户交互、数据传输方便、渲染效果等方面,对强GIS的应用考虑得少,所以架构上与桌面的GIS平台很不一样。使用HTML5开发的GIS平台,由于性能的提高、海量矢量数据的支持,很多桌面上的GIS功能都能转移到WebGIS上,这时候常见的WebGIS架构就难满足要求了。本文介绍了桌面GIS的主体架构设计(主要参考开源GIS平台 DotSpatial),希望能对大家有点帮助。

1. 平台主要模块

image-1666371714733
地图模块:负责地图的显示控制、图层管理、地图文档管理、屏幕坐标转换等。
数据模块:负责空间数据、属性数据、影像数据等数据格式的存取以及相关的操作。
投影模块:负责投影信息的定义和不同投影直接的坐标转换。
地图绘制:包括地图图层风格的设置、影像图层接口、矢量图层接口和标注图层接口等。
拓扑模块:包括空间拓扑关系计算、空间索引、几何对象的操作方法等。
基本绘制:基本图形的绘制,不同平台分别实现。

2. 地图模块

image-1666371758571
地图显示:MapView控件包括地图刷新、图层管理、屏幕坐标转换等功能。
地图文档:地图文档保存了显示图层信息、图层风格、数据来源、地图投影等信息。MapDocument对象负责地图文档的加载和保存。

3. 数据模块

image-1666371777805
数据集:数据集接口(IDataset)平台中各种数据格式的公共接口,它包括投影信息、数据集信息和数据集复制等基本操作。
网络数据:用于导航的一种数据格式,其存储内容包括空间数据、拓扑关系和相关的属性。
影像数据:负责影像数据的加载和显示,本平台中暂时支持瓦片影像格式,可使用在线瓦片影像或本地瓦片影像。
矢量数据集:矢量数据集接口(IFeatureSet)用于对空间和属性数据进行描述、管理和操作。包括基本的数据读取、数据保存、数据查询、数据编辑等方法。
空间数据:矢量数据集的空间数据部分,负责空间数据文件的读写操作、空间索引的维护。本平台中包括底图数据(EPJ)格式和可编辑数据格式两种。
属性存储:矢量数据集中属性部分的存取,一般使用Sqlite保存属性数据。
记录集:数据查询结果集合,用于枚举查询结果。
image-1666371794875
几何对象:Geometry,几何对象的基类,包括基本的对象属性和操作方法。子类包括:简单点(Point)、简单折线(Polyline)、简单多边形(Polygon)、多点(MultiPoint)、多线(MultiPolyline)、复合多边形(MultiPolygon)。

4. 地图绘制

image-1666371814278
图层接口:图层接口(ILayer)是地图显示的单元,它定义了基本的图层显示属性:最大最小显示比例、是否显示。图层中包括一个数据集对象,用于获取显示的空间数据或影像数据。
影像图层:继承于ILayer,实现影像图层的绘制。
矢量图层:继承于ILayer,实现矢量图层的绘制。它包含矢量风格对象和标注图层对象。
标注图层:继承于ILayer,实现标注文本的绘制。
风格方案:图层风格管理。
image-1666371831042
风格方案:IFeatureScheme,表示矢量图层的显示。
显示类别集合:显示类别IFeatureCategory的集合,负责类别的插入和删除。
显示类别:IFeatureCagetory,一个显示类别表示一组相同的显示方法,它包含有过滤条件属性(FilterExpression)用于过滤符合条件的地物。IFeatureCagetory中包括常态的显示风格Symbolizer和选中风格SelectionSymbolizer。
显示风格接口:IFeatureSymbolizer,点、线、面风格的公共接口。
点风格:IPointSymbolizer,点要素的显示接口,包含有Symbols属性(ISymbol的数组)。
符号接口:ISymbol,简单点符号的绘制接口,由它的子类完成点要素的绘制。子类包括简单符号、图标、字体等符号 类型。
线风格:ILineSymbolizer,线要素的显示接口,包含有Strokes属性(IStroke的数组)。
笔画接口:IStroke,笔画的接口,包含线性、线宽、颜色和偏移量等属性,由它的子类完成线要素的绘制。
面风格:IPolygonSymbolizer,面要素的显示接口,包含有Patterns(IPattern的数组)
图案接口:IPattern,图案的接口,包括边框风格、填充颜色、填充透明度等属性。子类有简单图案、渐变填充、图片填充等。

5. 地图控件

image-1666371851893

6. 几何对象

image-1666371870716

7. 数据访问

image-1666371894391