您的位置:首页 > 编程语言 > Java开发

ArcGIS Server Java ADF 案例教程 39

2009-09-02 17:31 429 查看

第一章 有关Web Service

在IDE的菜单中,你会看到有个很长的【ArcGIS Web Services Project】,别高兴,这不是给你自定义Web Service的,运行完向导你会发现生成的是一个Java桌面程序——有着一如既往丑陋的界面和很不友好的GIS功能。原来我一直当它是废物,不过前段时间它还真的帮了我大忙。我们有个测试需要测ArcGIS Server对Web Service的支持,要求必须抓取到浏览器与服务器交互的可读的SOAP消息;但是你要知道,考虑到效率ArcGIS Server内部都是用二进制的SOAP进行交互;要抓到可读的SOAP消息,ArcGIS的Web Service包必须被部署到浏览器端——最后,就是靠这个丑陋的“ArcGIS Web Services Project”,做了很多修改封装成了Applet才达到了这个要求。

扯远了,说了这么多其实只为了说明这样一点:“ArcGIS Web Services Project”是一个使用ArcGIS的Web Service类库实现一些GIS功能的Java桌面程序,演示意义大于应用意义。下面我们首先来讨论一下如何使用SOAP SDK来访问ArcGIS Server原生的Web Service;然后再谈谈怎么自定义Web Service,以便其它业务系统调用或出于其它目的的SOAP访问。

一 通过SOAP SDK访问ArcGIS Web Service

这里我们通过一个简单的功能来演示如何使用SOAP SDK来访问ArcGIS Server,调用一个Map Service的功能。不管你是在Java桌面、Applet、ADF还是自定义的servlet中,如果你需要直接使用SOAP和ArcGIS交互,那么下面的这段内容对你可能会有帮助。

这个简单的功能是“计算当前范围内的要素个数“,这个功能是如此的简单以至于我觉得看一下代码就可以明白了:

MapServerBindingStub mapserver = new MapServerBindingStub(url);

SpatialFilter filter = new
SpatialFilter();

filter.setFilterGeometry(mapDescription.getMapArea().getExtent());

filter.setSpatialRel(EsriSpatialRelEnum.esriSpatialRelIntersects
);

filter.setGeometryFieldName("SHAPE");

filter.setSubFields("*");

filter.setSearchOrder(EsriSearchOrder.esriSearchOrderSpatial
);

filter.setWhereClause("");

filter.setSpatialReferenceFieldName("");

filter.setSpatialRelDescription("");

int
count = mapserver.queryFeatureCount(“Layers”, 0, (QueryFilter) filter);

JOptionPane.showMessageDialog
(this
, "Feature count = " + count);

上面涉及到的各个ArcGIS的功能类都在com.esri.arcgisws包下,从命名上就可以看出这是专门为Web Service准备的。代码里用到的url是地图服务的地址,比如“http://host:8399/arcgis/services/name/MapServer“。在整个环节中你可能会对MapServerBindingStub的queryFeatureCount方法有一点兴趣,其实你打开ArcGIS帮助里的SOAP SDK,找到Map Services下面的QueryFeatureCount方法就可以看到,QueryFeatureCount需要3个参数,分别对应DataFrame名称、图层序号和QueryFilter,正与上面的代码相符。换句话说,com.esri.arcgisws包里的功能类就是SOAP SDK的Java实现。

可是,不管是ADF还是REST SDK都提供了比SOAP SDK好用多的调用ArcGIS Server功能的方法,所以想来你会和我一样,对上面的这些内容兴趣寥寥——我觉得ESRI对SOAP SDK也是兴趣寥寥,以至于在SOAP SDK的文档里几乎都没有Java的示例代码。

好了,让我们抛开ArcGIS提供的Web Service,来看看怎么自定义Web Service吧。我个人觉得自定义的Web Service是更加有用的,而且,功能也可以做得更强大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: