`
zhangziyangup
  • 浏览: 1076163 次
文章分类
社区版块
存档分类
最新评论

地理信息技术——平民化时代的来临(三)

 
阅读更多

本节主要的问题就是关于如何组织地理对象,以及如何绘制这些对象。地理对象是GIS分析的基础,在上节已经简单论述过这些地理对象,地理对象是可操作的,包括空间分析,数据处理,对象显示等等。为了绘制这些地理对象,我们这里假定开发环境是Windows,绘制引擎采用GDI+。为什么采用GDI+?因为GDI绘制的效果不行,如果画线,你会发现会有很多锯齿,如果地图绘制的线型比较粗,那锯齿效果明显太明显了,用户肯定抱怨死,GDI+的另一个优点是坐标变换比较方面。有优点肯定有缺点,画得好看必然费时,所以绘制效率不是很高,但是这个影响不大。

绘制地理对象的关键是模型转换。GDI+的可绘制对象和我们自定义的地理模型对象并不完全一致,这是需要转换的。上文中我们简单定义的地理对象有,点,线,面这三种,分别用Point, Polyline,Polygon表示,这三类是高级对象,在高级对象的背后,我们可以定义一些低级的对象,这些低级对象可以构造出这些高级对象,而我们的绘制过程只处理高级对象。

Point的绘制。在GIS中,Point包含X,Y坐标。GDI+绘制点没有直接的方法需要用符号表示,而符号可以有很多,最简单可以是一个圈,丰富些,我们可以读取字体库,例如我可以读取TrueType中的一个圈符号,绘制在地图上代表一个城市。下面的图上,我在东经116.3,北纬39.9的位置绘制了一个五角星的符号代表某城市。

第一步,把北京的地理坐标按照我第一篇所讲转到屏幕坐标

第二步,在字符集中找到代表五角星的TrueType符号的unicode编码

第三步,用GDI+ 的drawstring方法绘制五角星符号

Polyline的绘制,其实我在绘制大洲界限的时候已经使用。Polyline又名多义线,他也可以有多个低等级的对象来构建,具体可以参考ESRI的文档。GDI+绘制的时候可以用GraphicsPath来绘制,当然如果多义线存在多个Part(所谓Part就是多个独立的线来表示一个整体的多义线)。

Polygon的绘制是比较复杂的。相对于多义线,Polygon也可以由多个Part构成,例如环,其实是由两个独立的多边形组合而成,只是内外顺序不一致。当然最复杂的情况是Polygon由环和岛同时组成,如果能确定组成Polygon的多边形的线序,那就把GIS比较困难的部分解决了。

下图我构造了一个Polygon,它是一个环,由三个线序不同的多边形按顺序组合而成。

第一步,仍然是坐标转换(地理坐标到屏幕坐标)

第二步,得到每个多边形(其实就是能构成Polygon的多个Part)

第三步,调整每个多边形的线序(按规则来,可以设最外层是顺时针,其次是逆时针,再其次是顺时针...)

第四步,在GraphicsPatch中绘制出来,就能得到如下的效果

其实如果要达到商业化的应用,还有很多工作要做,例如效率,你必须设计出对应地理模型的高效的存储容器。这个其实也不难,可以把上述过程和开源的OGR结合到一起来解决,这就是下一个主题,如何采用OGR来扩展GIS数据格式的读取。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics