总是有人问我GeoServer上如何进行二次开发,我要说的是,事实上二次开发的时代应该就要过去了,我们即将迎来的是WebService的时代。我们不再需要面对针对某种特定编程平台实现的冰冷的接口,而应该面对的是开放的URL接口,统一的数据格式,这是一个Service的时代。而正是由于Service对标准、对统一的这种需要,OGC的一系列实现参考才有了诞生的意义。我很高兴地看到,不仅是开源软件按照标准进行开发,想ESRI、国内的SuperMap也都开发了基于标准的WebService,也正因为有了这些努力,OpenGIS在开源领域中显得格外整齐,格外“标准”。
那么就说说这几个开放标准吧,实际上这些标准定义的功能,在ArcView这个经典的桌面软件中都有包含,甚至说ArcView定义了GIS软件应该是怎样的,具有怎样的功能。
WMS是网络地图最基础最常见的一部分,它主要包括GetMap,GetFeatureInfo等接口。GetMap是用于将矢量数据以某种表现形式发送到客户端,这样的表现形式包括常见的位图和不常见的GeoRSS或GeoJSON,事实上用传统的观点来解释,GetMap获得的就是在桌面程序中画在Canvas里的结果,是数据的表现。GetFeatureInfo更容易理解,它和几乎所有的桌面程序上都用的Info按钮功能相同,都是用来获得屏幕坐标某处的信息,GetFeatureInfo中的参数是屏幕坐标、当前视图范围等,在一定程度上也方便了客户端的编写。GetFeatureInfo可以同时返回多个图层中的要素信息,这一点和ArcGIS Desktop等也都是相同的。WMS还包括一些GetLegend之类的返回图例信息的请求,也是完全按照桌面既有的标准定义的。
WFS对应于常见桌面程序中的条件查询功能,WFS通过OGC Filter构造查询条件,支持基于空间几何关系的查询,基于属性域的查询,当然还包括基于空间关系和属性域的共同查询。在Web上,WFS的请求不是以SQL实现的,而是通过Filter XML来实现,可扩展性更强。WFS所返回的是查询的结果集,从某种程度上说,区别于WMS的“数据的表现”,WFS的结果集是由完整的Schema定义和约束的结果集,以GML为载体。这个结果集,类似于桌面程序查询结果的数据表。
WCS对应基于栅格数据的功能,与WMS基于矢量数据的特点相对应,WCS1.1中还仅有一个GetCoverage接口,用于通过指定的样式表(SLD)来显示栅格数据。
WPS是新近推出的标准,它的功能其实在后台我们已经耳熟能详了。Processing即ArcView中的GeoProcessing,诸如Union,Intersect等方法在常见的几何库GEOS、JTS等中都已经实现。WPS要做的就是暴露基于URL接口来实现客户端通过WebService对此类方法的调用、并返回数据。
基于以上标准,已经可以开发基于Web的以浏览器为客户端的地图工具,而WebService同样也可以用于桌面软件,那么像uDig这样的也可以算是分布式的ArcView了。

