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|…]。

    如果你安装了我提供的代码,马上就可以试试下面的例子。

    GetLengths的调用请求例子:http://localhost:8080/geoserver/ows?request=getlengths&service=gp&version=1.0.0&geoms=LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)|LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)

    GetBuffers的调用请求例子:http://localhost:8080/geoserver/ows?request=getbuffers&service=gp&version=1.0.0&distance=10&geoms=LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)|LINESTRING%20(%201%205,%205%205,%205%201,%203%203,%201%201%20)

   

    确定了服务协议,下面来编码(这个太简单就不需要什么设计了)。细节我就不再赘述,可以自行查看源码。我只在这里简述一下代码结构,见下图:


命名空间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)演示”,这就是我们安装的页面。打开后进入我们的演示页面。


演示页面下方有选项,可以选择操作,长度和缓冲两种。目前演示只能画线,单击画线,双击结束画线。下面是演示结果。


转载自:https://blog.csdn.net/sxausgyy/article/details/8119379

You may also like...

退出移动版