从事GIS应用开发也有3年了,但是做了些东西自己始终不满意,不是不稳定就是效率低,不是功能杂就是不实用!
首先是AE开发,我必须说自己很欣赏ArcGIS的软件设计架构和思想。但是在开发的过程中也确实遇到了很多问题。首先是效率问题,Oracle的效率很高,可是建立在Oracle之上的SDE加载矢量图层,添加、删除要素类却很慢,这个让人很费解。不全是数据量的问题,即使是一个图层也会有这样的问题。AE过于庞大了,安装了ArcEngine占用了太多的空间和内存,毕竟是互操作封送了数据。不知道“嵌入互操作类型”能不能解决这个问题!
其次是扩展性上,可能没有任何一款软件能够开放到如此程度吧,想扩展自己的数据格式或数据结构非常困难。尤其是应用GIS到工程领域还是有很多问题的。当然也有这样的原因,由于AE的庞大,开发者往往不具备足够的知识来洞悉其中的门道。确实,作为一名GIS专业的毕业生,整个大学和研究生阶段都没有系统的讲授软件底层的知识。比如GIS算法,计算机图形学,就算讲了也都是皮毛,对于数据结构和数据库等应用技术也都是自己摸索的。诚然学生最重要的是培养自己的学习能力,但是在从业后估计少有人能够深入的再研究这些基础的东西了吧。没有系统的知识也很难去深入的进行二次开发。
第三个是稳定性,这个主要是开发者的原因,当然也有AE的问题。项目开发总是太庞杂,太乱。
现在所在一家三维公司有一个自己的平台,从扩展性方面来说确实是提高了很多,可以做自己想要的渲染结果,但是却也是有诸多问题:
一是程序版本很乱,不同版本的Dll可能有不同的问题,可能会缺失其它版本所具有的功能。
二是整合了很多开源的代码,拿来主义,存在很多不稳定因素。而且大家都懒的自己写写东西,连验证有时候都不愿意去做。项目任务分配时候根本不会给你那么长的时间。一旦你说功能有了,领导就认为修改是分分钟的事情。
三就是需求,项目的需求总是一变再变,导致做的系统总是很庞大,开发都没有心情了。GISer本来不具备行业知识,这个可以学习,但是想专业!难,很难,可能也只是能够装模作样罢了,这样浮躁的社会,从事三五年就能把行业的业务知识搞清楚了吗?我觉得很困难。
四软件的架构设计非常混乱,总体框架设计、权限管理总是很乱,名义上是插件式、RBAC,但是也仅此而已。功能总是要完成了之后才说权限的问题。GIS不知道是不是都和主流的软件开发脱节,不注重软件架构的分层。图形数据不好分层,业务上明明就是信息管理,却没有什么ORM映射,逻辑分层这样的东西。可能GIS专业人员当项目经理根本就没有很多软件设计的经验吧。信息管理系统和图形数据处理系统区别很大,和数据分析的区别很大,参与的项目总是把所有的功能杂揉在一起,一个系统既包括信息管理,又包括图形编辑处理,还包括数据的计算和分析。对于GIS图形软件尤其是3D软件,采用网络总是要考虑数据的传输和加载问题的,加载矢量数据越多越影响系统的运行效率,如果有影像数据就更慢了。业务分析功能往往是有中间结果的,这些数据没有必要上传到服务器,所以保存在本地。于是系统就成了这个样子,可以加载基础地图数据,可以根据业务需要在SDE中新建各种图层,支持图层版本注册和编辑。有的时候需要从Map中加载图层,有的时候要从SDE中加载数据,有的时候要从非空间的Oracle库中取数据。从Map和非空间数据库中获取各种图层、属性和参数数据进行计算并将分析结果保存在本地,在计算的的过程中可能需要从本地加载一些数据进行分析。这样的系统总是很慢,加载数据慢,分析慢,连信息管理都要卡,可能还会莫名其妙的崩掉。一会是联机数据一会是本地数据,我觉得很别扭,这个和ArcGIS这样的通用平台有什么区别?只是SDE定死了,一个非空间库定死了。其实ArcGIS完全可以实现啊,而且分析功能用的还是GP。个人感觉如果是信息管理干脆做个B/S的得了,这样还实用些,本来就是分权限管理的吗!如果是用于工程设计的软件的话还是做个单机的算了,像sufer软件那样。把ArcGIS那套版本机制拿过来用也没有必要非得联机啊?人家本来就有离线版本啊。设计完了可以提交文件也可以入库啊!更扯的是本来已经很庞大的系统了还要同时支持联机和脱机!在加上没有分层设计,所以各种条件判断。为了保证程序不出问题,各种try-catch-log。
相比之下感觉GIS行业中Web地图的开发确实不错,比如百度、高德。首先需求明确,面向的用户群体是所有普通的老百姓。二是Web开发相对来说要简单一些,可借鉴的东西很多。不需要特别复杂的空间分析,行业应用也要少。三是这些都是大的网络公司搞的,或者说是计算机背景的人搞出来的,技术实力比GIS专业的强。现在的GIS项目还不是很透明啊!