`
阿尔萨斯
  • 浏览: 4185710 次
社区版块
存档分类
最新评论

基于.NET 2.0的GIS开源项目SharpMap分析手记(九):SharpMap中Styles和Geometries名称空间下有关类的分析

 
阅读更多

基于.NET 2.0GIS开源项目SharpMap分析手记(九):SharpMapStylesGeometries名称空间下有关类的分析

粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:<chsdate w:st="on" year="2007" month="6" day="15" islunardate="False" isrocdate="False"><span lang="EN-US">2007-6-15</span></chsdate>

转载自:心帆http://group.qq.com/group_index.shtml?groupid=8755486

1 Styles名称空间下有关类的分析

1.1 概述

Style,译为样式,是在绘制图形时使用。

GIS中,系统在保存数据时,有的格式对每一个要素有其的显示样式,比如Mapinfo;有的不保存,比如Shapefile。无论是否保存,在绘制图形时,都需要使用样式来显示一个要素。比如一个要素是用来表示公路,一个要素用来表示河流,他们在文件存储时是没有太大的区别,而在绘制时,由于使用了不同的样式,就可以很明显的看出来。

1.2 与其他模块的关系

样式的使用,在SharpMap中,主要是有图层绘制(又称为图层渲染)时使用,具体见VectorLayer.cs中的Render方法。

VectorLayer中,包含有一个样式对象(见private Styles.VectorStyle _Style;),说明SharpMap的思路是一个图层只能有一种显示样式(专题图时例外)。同时,SharpMapShapefile文件格式非常近,一个图层也只有一种类型的数据(要么都是点,要么都是线,要么都是面)。而Mapinfo则不是这样,一个图层可以包含有点线面各种数据。SharpMap使用这样的方式,也是出于简单易行的目的。

1.3 本身的构成

SharpMap中,实现IStyle接口的有两个类,VectorStyleLabelStyle

VectorStyle是用来绘制矢量要素的,点或者线或者面都可以使用这个类的对象来进行绘制,但是不同的几何类型是使用VectorStyle对象中的不同成员(似乎在设计时有缺陷,比方如果这个图层都是线,那VectorStyle中的_FillStyle就不用,但这好像不太合理)。查看VectorStyle的几个成员,很容易明白各个成员的意义。

LabelStyle用来绘制标注文本,可以设置其字体,颜色,大小,背景发光,以及水平对齐和垂直对齐方式等等,应该说对一般的文本显示来说够用了。

SharpMap中由于使用的是样式,没有符号库的概念,所以只有使用一些GDI+中的基本画笔、画刷对象,不能绘制出复杂的符号,尤其是线符号是没办法解决的,比方说国界的符号,桥梁的符号等等。

2 Geometries名称空间下有关类的分析

2.1 Geometries概述

Geometry在此处指的是现实世界中的各种事物抽象出来的几何描述,从大的方面来讲,就是点、线、面三种类型,个人认为译为几何类型比较合适。例如,一个城市可以抽象为一个点,一条道路可以用一条线来描述,大面积的湖泊则可以用面来描述。

应该注意还有一个词汇Feature,一般译为要素。要素在理解上是对现实世界中的一个对象的完整描述,现实中的对象,除了用几何类型来描述其位置信息,还应该有其他的属性信息。例如,一个城市,可以用一个点描述其位置信息,再加上城市的名称、人口数、面积等等其它属性,就构成了Feature。简单的说,就是Geometry加上其他的属性信息可以构成Feature

SharpMap中的Geometry使用的是OpenGIS中对几何类型的规范,在本文的第三部分中将会详细说明Geometry下的各个子类。

2.2 与系统其他类的关系

GeometrySharpMap中的基础,用来的它的地方主要是在数据访问与图层绘制以及空间分析和空间关系判定时。

GIS中,矢量数据一般是以记录的形式存储在文件或者数据库中(一个要素对应一条记录),一个底层平台软件,需要将数据读取出来,然后在内存中构建成Feature,而大部分的空间分析与操作,需要提取Feature中的Geometry来进行,比方判断两个对象是否包含。

数据访问需要解决的问题就是要将文件或者数据库中的要素读取出来,构建内存中的要素。

如果系统设计的要素不全,有些文件中的Geometry就完全正确的读取。比如Mapinfo中有圆对象, SharpMapGeometry没有相关的类,这时要么把圆对象抛弃,要么用转换的方法,比如可以在圆周上加密点,然后以面对象构建它。

从抽象的角度来看,系统的几何类型是越少越好,但是从功能和兼容其他数据的角度,系统的几何类型是越丰富越好,这是一对矛盾。应该说使用OpenGIS中的几何类型,也可以描述出现实世界了。任何一个软件不可能解决所有的问题。

图层绘制,就是需要将内存中Geometry绘制成屏幕上的图形,这个地方一般来说都需要Geometry。(有一种做法其实也可以不用Geometry,那就是读取一条要素后,放入一个事先开辟好的足够大的内存空间,然后直接绘制出来。但是这不太合理)

空间分析使用Geometry是很容易理解的,很多分析都是直接在Geometry类的基础上做的,比方说点、线、面的缓冲区就可以如此。

空间关系的判定也需要使用,比方说要判断对象是否相交时,如果没有构建两个Geometry,就没办法判断这两个几何体是否相交。




<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
分享到:
评论

相关推荐

    基于.NET 2.0的GIS开源项目SharpMap分析手记

    基于.NET 2.0的GIS开源项目SharpMap分析手记---粟卫民(收集为doc文档)

    基于.NET2.0的GIS开源项目SharpMap分析手记.doc

    基于.NET2.0的GIS开源项目SharpMap分析手记.doc

    1 基于NET 20的GIS开源项目SharpMap分析手记.doc

    1 基于NET 20的GIS开源项目SharpMap分析手记.doc

    GIS项目SharpMap源代码

    是基于.NET 2.0的GIS开源项目SharpMap 支持sharp文件和mysql等作为数据源 用来做GIS地图显示和渲染很方便

    C#开源GIS项目SharpMAP

    国外开源gis项目源代码及例子,可以做WEBGIS和窗体应用程序GIS

    最新 SharpMap源码

    目前的很多的项目中都用到了GIS 软件,然而在开源的GIS软件中有SharpMap在工程应用中开始被人发觉。相比一些GIS软件它拥有的优势有: 1、占用资源较少,响应比较快。在对于项目中如果只需要简单的地图功能的话,是...

    开源GIS Sharpmap及其shp资源

    SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据,可应用于桌面和Web程序。 目前支持B/S及C/S两种方式的DLL调用,支持地图渲染效果。稳定版本为0.9,最新版本为2.0,代码行数近10000行。

    sharpmapmap渲染

    SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。 它的优点有:  1、占用资源较少,响应比较快。在对于项目中如果只需要...

    GIS软件SharpMap源码详解及应用

    这本《GIS软件SharpMap源码详解及应用》由陈真、何津、余瑞编著,对目前基于C#语言开发的GIS开源项目——SharpMap进行详细剖析、解释,以便GIS专业学生及GIS的初学者能学习和掌握GIS底层开发技术。全书分为3部分共计...

    asp.net知识库

    asp.net2.0:扩展ImageButton控件定制自己需要的功能 ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language ...

    sharpmap2.0 winformsample 可用

    sharpmap2.0 winformsample 可用,共同学习

    SharpMap开源代码和项目实例

    经典C# GIS,开源,SharpMap开源代码和项目实例

    实现表格与地图的数据联动

    基于.net2.0和DevExpress、SharpMap的WinFormDemo,选中表格中的行,地图中会自动显示选中行在地图上的位置

    sharpmap类文件

    SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。

    sharpmap英文版说明文档

    SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。

Global site tag (gtag.js) - Google Analytics