最近参加面试,面试官问我"你的开发经历主要都是二次开发是么?" 我想了想回答"是"。这个问题在一般公司是不会被问到的。 这是GIS行业的一个特有含义的说法。 二次开发,基本的意思就是你开发水平有限,和真正的程序开发人员有一定的差距。
其实我从开始搞软件开发一直都是在做二次开发,开始是做.Net Framework 然后是Spring Framework之后是AO,AE 在之后Skyline,Google Map Api,BaiduMap Api等等。对还有Jquery。不借助第三方接口完成的原生代码好像就只有Html和CSS。如果我作为一个普通开发者貌似经历很丰富,可能待遇也不错。要是作为一个GISer,在GIS行业就比较遗憾了,不管你水平如何你都是二次开发。
我刚入行是不怎么会写程序的,总觉的写程序是个深奥的事情。做了5年的开发回头看看,这是个体力活。软件行业其实也和GIS一样,经过多年的积累产生了很多封装好的SDK,能用来完成自各样的任务。绝大多少的程序员也会借助这些SDK来高质量的完成自己的工作。要是不精通几个第三方的框架,那你做的东西肯定需要多化不少时间来完成工作。 这种“二次开发”在软件行业被称作是否熟悉某个框架,而这点对一个开发者来说也是优势之一。
整个互联网行业的快速发展也要求开发人员能够借助第三方的框架来高效的完成软件开发。GIS项目开发是一样的,用户没办法等你很长时间让你去开发一个高效优质的算法。他们只希望快速的得到结果,满足他的需求。所以通过二次开发来满足用户的需求就是一个非常合适的解决方案。
而作为一个合格的GIS开发者,除了掌握必要的软件开发技能外还必须掌握普通开发者不用掌握的技能。
你最好了解地图数据的生成流程,知道地图是怎么来的。会通过GIS软件进行矢量化,能处理遥感影像数据,会使用测绘仪器添加空间数据。不敢说精通至少应该会。
其次你对空间数据类型也需要深刻理解,地图数据可以分为两大类。矢量数据和栅格数据。矢量数据可以分为点,线,面三大类,在CAD里面还会有复合图层这种类型。在Oracle Spatial中有六种描述方式(Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon)。栅格数据就是图片,可以是卫星影像,DEM,地图切图数据。这些数据都是你在程序开发过程中除了String和Number类型之外的数据类型。
同时这些数据还必须在一个统一的体系中,一般称作坐标系统。上面说到空间数据都是基于某个坐标系统来进行生成和管理的。坐标系统常用的椭球大概有3种,这基础上还有两种表达方式地理坐标和投影坐标。他们之间可以相互转换。这也是非GIS专业开发人员最头疼的部分。
当你理解上面所有内容后你还需要不断深入学习ArcGIS产品体系,Skyline产品体系,国产各种GIS专业软件来管理和应用空间数据。如果要想熟练的进行GIS软件的二次开发绝对不是查查文档就可以的。开发接口一般都很抽象,除了具备专业知识你也要会使用这个软件,知道他能做那些事情。你才能明白那些接口是干什么的。知道接口能干什么,想实现起来也没那么容易。比如你想做个最佳路径分析,绝对不是传入起点终点那么简单,这个需要道路数据建立拓扑关系,如果分析错误,这个问题你就要用你的GIS专业知识从头找原因了。
系统开发阶段其实比普通的开发者需要知道的还要多,因为你数据库中多了6种空间数据类型,也多了不少空间分析的存储过程。普通系统中该有的数据表和业务逻辑也一个也少不了,部分业务内容还需要与地图交互。
GIS的开发人员的知识储备和综合素质的要求远大于普通开发者。为什么GIS二次开发这么不受待见。很不理解。
怎么破呢?放空自己,忘记GIS。 做自己想做的事情。