2008年12月14日星期日
我的GIS之路
虽然说起来我接触GIS已经4年了,但是前两年几乎等于没有接触。主要是因为自己没有买电脑,就算想学,也没机会学。其实大三的时候,邓老师上GIS那课的时候,我还是好好学了一下。那时候,看了一本很好的书,书的名字我记不住了。好像是陈健飞翻译的一本老美的书。由于老师的严格要求和自己的努力,我对GIS概念上的那套东西有了基本的了解。大四的时候,我神使鬼差的找到一份GIS二次开发的工作,这才算是正真的开始学习和了解GIS。但是那个时候主要还是以学习编程语言为主,当时用了慧图公司的top map SDK,现在想想,那个软件真的还挺适合上手的。虽然很多功能不能做,但是学习的门槛很低而且学习曲线也不陡峭。
做了三个月基于TOPMAP的二次开发后,又开始基于ARCOBJECTS做一个GIS的框架,作为以后公司CS模式GIS的框架。很遗憾由于后来别的项目的原因,我没有完成这个开发任务,但是ESRI清晰的设计还是给我留下很深刻的印象。在开发的过程中,我时不时的需要做一些图,来给客户看,因此学会了一些基本的操作。但是除了那些基本的操作之外,我建立起来了,地图,图层,实体,属性这些基本的概念。当然我建立的不是死的概念,而是很具体的概念和操作的对应,从此我才算是正真的踏上GIS之路。
后来一年的工作里,我其实一直都没怎么接触GIS,除了当时协助邓老师,指导一位本科毕业生。由于我当时的工作比较忙,除了搭好框架外,实际上没有给他太大的帮助。虽然我没有接触GIS,但是我在Database方面有了长足进步。而且十分幸运的是,我学习的是ORACLE数据库,并且在数据库编程方面下了点功夫。当然,当时对于XML Db这块的学习,更是锦上添花。因为其实ORACLE数据库中的XML Db和SPATIAL Db的构成原理有类似之处。因此这也是我对想真正学习GIS的同学的一点建议,那就是花3个月到半年时间来学习一门数据库,当然我更建议学习ORACLE或者Postgresql,主要原因是他们的功能性很强,学习数据库编程的时候更加有回旋余地。而且这两个数据库上面都有已经成型的,非常强大的空间数据库扩展。需要注意的是,不要去学数据库原理这样的课程,主要是因为这样的课程比较空泛,理论太多而实际用的到的内容太少。
八月份后我就开始准备复习和出国的事情了。这时我看了两本书,对我的帮助很大。一本书是《为我们的世界建模》,英文名字叫做《modeling our world》,是ESRI公司的一个人写的。另外一本书是《空间数据库》,英文名字叫做《Spatial database a tour》,是明尼苏达大学的一个老师写的。前者主要是针对geodatabase的一些理论说明,后者则非常全面和深入的讨论了空间数据库的很多方面的内容,但是想读懂这本书需要很强的数学,数据库以及JAVA方面的功底,强烈推荐想学的同学看看。当时还旁听了一个老师的GIS课程,当然他讲的挺垃圾的,估计全班90人没几个人听懂了。
大概是从11月份以后吧,我使用GIS的时候就如有神助了。其实最重要的是,我已经对GIS的术语,概念和基本模型很了解了。因此,面对问题的时候,我能很快的使用GIS的数据模型来模拟,而碰见不太懂的操作的时候只需google一下就好了。这一段时间,我还看了一些map server的源代码,当然主要是想糊弄明大的那个老师,不过他鹰眼犀利,一下就看出我是个草包。因此,我建议想学的话,可以先把基本的概念弄明白,然后学习如何将这些概念模型应用到自己的领域中,动手实践,发现问题,反过来再看书学习......到帮助邓老师代05级学生环境规划实习的时候,我已经对GIS领域内的内容了如指掌(哈哈,吹牛了)。
放假回家后,闲来无事就继续研究研究GIS。这时候,我才正真接触了PGSQL和POSTGIS。关于这两个东西介绍,网上有很多,只是都不怎么好,如果想学习的话,建议大家看看POSTGIS的手册,和数据库里面的源代码。注意,需要看的数据库里的PLSQL源码,而不是C语言写的那些代码。对于想学空间数据库的朋友来说,POSTGIS是一个不可多得的财富。有时候宝藏就在咱们手笔,只是百分之九十九的人不知道怎么念芝麻开门。还有一个很好的工具是QGIS,它是一个很好的POSTGIS的前端软件。我自己觉得POSTGIS和QGIS,再加上MAP server,你就可以搞定GIS内80%的问题,而且全部都免费。在家里最大的进步就在于对于一些GIS软件的基本实现有所了解。如果在达到我上面说的了如指掌的境界后,还想继续学习GIS软件的基本实现的话,那我建议好好看看POSTGIS(空间数据存储),QGIS(空间数据显示),MAP SERVER(空间数据的WEB服务器),当然后这三个对于C语言要求挺高的,熟悉C语言是前提要求,而POSTGIS除了对C语言要求挺高之外,还需要精通PLSQL编程,因此在学习这些东西之前,要有足够的心理准备和知识储备。如果是熟悉JAVA语言的话,可以看看UDIG(空间数据显示),GEO SERVER(空间数据的WEB服务器)。另外,MYSQL的空间数据库扩展MYSPATIAL也很有特色,走了一条跟现在的ORACLE和PGSQL都不一样的路(跟ORACLE8I的空间数据库差不多)。
说了这么多,还是想总结一下,多看书+多思考+多实践=GIS Expert。
2008年8月11日星期一
从ARC SDE说起
众所周知,ARC SDE是ESRI公司世界领先的空间数据中间件产品,但是从06年发布ARC GIS9.2 以来,SDE再单独出售,而是集成在ARC GIS SERVER产品中一起出售。就GEO DATABASE本身来说,其性能不在ORACLE SPATIAL之下,而且支持多种流行的数据库,而SDE正是显示端和服务器数据交互的不可或缺的中间件。为什么会停止单独出售SDE,ESRI葫芦里卖的什么药呢。
其一,随着ORACLE,微软之类的大厂商介入,SDE原本具有的实现GEODB的功能,显得越来越不重要。如果SDE单独出售,不仅在价格上不具有优势,而且性能上也肯定会被ORACLE比下去,甚至可能赶不上一些开源的空间数据库。SDE的定位应该是像它的名字那样,空间数据引擎,就是负责数据传输的通路,而不是自己去实现空间数据存储,SDE的优势应该是支持多种空间数据源,成为最好的空间数据中间件,而中间件本来就因该集成在服务器中。
其二,随着ESRI退出SDE,其在GIS领域的垄断地位进一步加强。有人说,ESRI相对于其他厂商的优势就在于SDE,我觉得这么说一点也不过分。其实GIS说白了就是一个加强了显示,编辑和分析功能的数据库。而数据模型是功能和性能的基础,因此ESRI凭借ARCGIS的强大功能成为GIS名副其实的领跑者。但是随着SDE性能越来越好和WEB GIS 的流行,其他厂商对SDE这一私有数据格式纷纷表示不爽。于是ESRI顺水推舟,将SDE不再单独出售,的了便宜还卖乖。
其三,随着ARC GIS9.2的退出,ESRI还推出了自己的FILE GEO DB,进一步加快向数据存储领域的进军(当然我以为是防守式的进军)。与SDE相比和PERSONAL GEO Db相比,FILE GEO Db不需要其他的数据库作为其宿主;而与SHP和COVERAGE相比,一方面不受DBASE的限制,另一方面性能上也强很多(单表可以存储1TB的数据)。更重要的是,FILE GEODB可以跨WINDOWS和LINUX平台,为ESRI将自己的ARC GIS搬到LINUX上奠定基础。因此,SDE逐渐退出数据存储领域是必然的事情。
最后,前几天看见ESRI对将要发布的ARC GIS9.3的说明,这一版将会支持LINUX。ESRI始终是GIS界风头浪尖的弄潮儿,技术上一点也没落后。不知道国产GIS 什么时候会出LINUX版,不过就我所知,国内GIS厂商都是基于MFC做的,跨平台几乎意味着重写所有代码,由此看来重回C语言平台才是正道。(C语言用来写GIS的内核,而用JAVA SWT来做展示层,这是我对跨平台的一点设想)
我用过的几个开源GIS软件
去年开始接触了一些开源GIS软件,个人觉得这些软件做的挺不错的,想介绍给使用GIS的朋友们。
从空间数据库 说起吧。在空间数据库领域,商业化的产品有ORACLE SPATIAL,以及以前的ARC SDE等等,而开源空间数据库虽然在功能上略有欠缺,但是在性能上毫不逊色。开源的空间数据库主要是postgresql和mysql的空间插件,分别是postGIS和mySpatial。目前由于PG对于面向对象支持的更好一些,所以postGIS在性能上和功能上都比myspatial要强一些。但是两者都有一个最重要的缺陷,就是不直接支持栅格数据。解决方案是将栅格数据存储为BLOB类型,并且对其建立四叉树索引,用以模拟商业数据库对栅格数据的存储。相对来说我更喜欢POSTGIS一些,原因有三:1,MYSQL本身不是在所有情况下免费,而PG在所有情况下都免费;2,POSTGIS性能和功能上都强于myspatial;3,国外已经有很多基于POSTGIS的成功应用,可以降低风险。
接下来轮到桌面软件了。QGIS和GRASS是很好的桌面GIS,当然基于ECLIPSE平台的UDIG也是另外一个选择。QGIS的最大特点在于界面很友好,熟悉ARCGIS的人都能很快的掌握QGIS的操作,另外QGIS对WMS的支持也不错。再者QGIS可以无缝集成POSTGIS,最后QGIS几乎完全照搬了GRASS的分析功能,因此其分析功能也很强大。GRASS本是美国军方开发的GIS,开源后一直受到美国大学老师们的青睐,它可以提供很多ARCGIS能提供的分析功能(当然每一种功能可选的算法没后者多),但是GRASS的界面比较丑陋,很多功能需要手动运行命令,因此不太适合大多数人用。基于eclipse平台的UDIG是桌面GIS的又一个选择,由于它是基于eclipse平台的,运行起来比较慢一点,而且比较耗内存。与前两者相比,它的优势在于操作的简单性,而且支持很多种空间数据源,包括很多商业空间数据库,缺点主要是分析功能比较弱。不过现在UDIG发展很迅速,也建议尝试一下。
开源GIS服务器主要有map server和geo server。Map server有两个版本,完全免费的那个那个版本是由明尼苏达大学开发的,全部是用C语言完成,效率很高可以媲美ARCGIS SERVER,并且支持我所知道的所有GIS数据源,但是相对来说简陋一些,并且没有内置AJAX支持。而map server的企业版本来是auto desk公司的map guide,这个版本功能很强大,而且还有IDE支持,当然IDE也有两个版本(付费的和不付费的),此外auto desk还封装了很多AJAX组建,因此这个版本可以说是真的企业级支持了。而geo server则是另外的选择了,
它是基于JAVA平台做的,安装时需要JDK1.4(高版本的也不行),其功能上和map server的完全免费版类似,但是性能上次之,只是如果对跨平台要求比较高的话,可以考虑使用它。此外,OTN上的文章一直喜欢使用GEO SERVER来发布ORACLE SPATIAL的地理数据,也不知道是为什么。
此外开源GIS客户端技术,也进行的如火如荼,好几个框架都实现了对AJAX的支持,
虽然我没有仔细研究这些框架,但是我觉得进行一般的GIS应用因该没什么问题。据我所知美国NASA就利用POSTGIS来管理他们好几个TB的空间元数据,而英国陆军部好像使用了map server来发布一些他们的地理数据。相比之下,我们国家即使是一个小小的县级市,在做自己门户网站时候,都是使用ARCGIS+ORACLE+WEB LOGIC的超豪华阵容,其实我们完全可以用QGIS+POSTGIS+TOMCAT来实现,这样从软件投入成本来看,我们几乎可以不花一分钱,可以节约多少劳动人民的血汗钱阿。