作为一个GIS知识和编程知识都很菜的菜鸟,面对诸多大牛推崇的SharpMap源码,诚惶诚恐。
“吃饱了撑的”看SharpMap,仅仅为了了解GIS的一些基础概念。
也许找本GIS原理的书,会更快的达到目的。但是想起那些枯燥的乱七八糟的课本,着实让人心灰意冷。
至今看的比较带劲的GIS书也就两三本,他们都有一个共同点,可操作性。
还记得当年从图书馆偶然看到那本书(好像是地理信息系统实习教程,作者是宋小冬)的时候,兴奋不已,也正是这本书带我入了门。
理论和技术总是一对矛盾,争论由来已久。回头看看自己的学习经历,总结为实践很重要,学了数学公式,不知道怎么计算生活中问题,
学了物力,不知道该如何扯根线路,背了孔孟之道,却没有真正的做,学了这些有什么用?
扯远了。面对SharpMap,怕难以坚持,也就计划写笔记,记录点点滴滴,能学到多少算多少吧。
写这个笔记是给自己看的,也就不用思维缜密的剖析了,毕竟自己是个菜鸟嘛。所以碰到问题就臆想吧,不知道的东西太多了,YY下总可以吧。
工程代码下载编译通过后,碰到的第一个问题就是:从哪里入手?
这个问题真要命,对我而言,SharpMap就是庞然大物,于是就搜了一些博文看,算是对其有了一些初步的了解。
后来想起老师说过,GIS的定义就是围绕着数据从哪里来,到哪里去,干什么用说事的,所以我想看代码就从数据流来吧。于是就有了些猜想
1,数据的存储和组织
代码中是读取的Shapefile文件,把几何和属性存储为内存模型。目前我觉得GIS数据的存储主要有:
A,文件存储。早期的时候我想往往是这样的吧,后来数据量大了,就有人站出来说用关系型数据库吧,于是很多人开始鄙视文件存储,直到后来WebGIS采用散列图片的方式,以及拜WorldWind等开源项目所赐,一夜间,影像、地图全成了散列组织了。
B,关系型数据库。数据如何组织的理论知识好像挺多的,没记得多少,只是记得GIS数据用关系型数据库存储先天不足,估计是不能动态添加坐标信息吧,后来出现了Spatial模块,但是可能存在一些不尽人意的地方,于是就有人站出来说用对象型数据库吧。
C,面向对象数据库。这个了解的真不多,目前就用过PostGIS导入了一个数据,感性认识都谈不上。很多人说和关系型数据库相比不很成熟,等以后用了再说吧。
SharpMap就看看Shapefile读取就Ok了吧。
2,数据的内存模型
先不管属性信息了,几何信息在SharpMap中应该是对应的各个Geometry对象,然后通过空间索引进行管理。
3,数据的显示
地图对象有图层构成,图层由各个几何对象组成,数据的显示,最终归结为地图的显示,地图的显示,会遍历各个图层,图层进行显示。
图层会找各个几何对象,比如线图层,会有很多条线组成,遍历每一条线,然后绘制该线。源码是用GDI+进行渲染的。(第一次听渲染这个词,觉得挺神秘的。)
有人说GIS软件最重要的是几何对象如何在内存中组织以及如何进行渲染,这个理解的不深,但是感觉上是这样的。
数据的流程估计是这样吧,于是便想用C#试一试,能不能把这个流程走一下。