WebGIS最佳实践-1 为GeoServer增加GP(Geometry Processing)服务
起源:QQ群中一个朋友问我怎么把GP服务增加到GeoServer中,当他描述他的需求时我脑海里大概就有了实现方案,但是要在QQ里把这个方案说清楚确实不太容易,于是我萌生了写一篇文章的念头。进而,我决定开始一个系列就叫“WebGIS最佳实践”,这里当然没有什么“最佳”,这里只有我遇到的,别人遇到的,或者我自己的突发奇想的关于WebGIS的问题,然后我会提供一个解决方案,这个方案可能是我设想的,也可能是别人提出我整理的。如果是别人的我会尽量注明出处。这个系列我会不定期更新,谢谢关注。
问题:怎么把长度度量(Length)和缓冲区(Buffer)操作增加到GeoServer中,怎么调用它。
方案:
我选择的GeoServer源码是2.1-RC3,这是我正在研究的代码,它的结构比2.0.2有了较大的改变,看多我的“GeoServer源码解析和扩展 (二)注册服务”的朋友可能会发现许多不同,不过不用太过担心,原来的结果在新代码里依旧兼容,只是会有“Deprecated”警告。
首先我们需要设计服务协议,我希望的HTTP调用可能是这样:http://[GeoServer Address]/ows?request=GetLengths&service=gp&version=1.0.0&geoms=[WKT|WKT|…]。它符合OGC OWS的调用规则。该服务返回一个JSON的数组,[length,length,…],由于输入参数可以是多个Polyline,所以返回也是多个值,以下标对应。
同样,缓冲区的调用规则为:http://[GeoServer Address]/ows?request=GetBuffers&service=gp&version=1.0.0&geoms=[WKT]。返回JSON数组,[WKT|WKT|…]。
如果你安装了我提供的代码,马上就可以试试下面的例子。
确定了服务协议,下面来编码(这个太简单就不需要什么设计了)。细节我就不再赘述,可以自行查看源码。我只在这里简述一下代码结构,见下图:
命名空间wj.demos.gp下面是服务代码,wj.demos.web是演示页面的代码。GeoServerApplication.properties存放着一些页面上的配置信息,文件里面不是乱码是汉字的UFT8表示,用jdk自带工具native2ascii生成的。这样才能显示出汉字。
附录:
1 代码安装,首先,本机需要安装JDK1.5及以上版本,Eclipse Helios Release。GeoServer2.1-RC3的源码。下载源码,解压到GeoServer的代码目录下
启动eclipse,打开File\Import菜单导入demos项目。然后把demos增加到web-app项目的依赖项目中
这一步主要是为了让web-app启动时能够加载我们的项目。现在启动web-app的Start类
然后浏览器中敲入:http://localhost:8080/geoserver/web/,会进入登录界面,点击Demos链接打开演示页面
演示页面处理自带的连接外还有一个“几何操作(GP)演示”,这就是我们安装的页面。打开后进入我们的演示页面。
演示页面下方有选项,可以选择操作,长度和缓冲两种。目前演示只能画线,单击画线,双击结束画线。下面是演示结果。