在这个小节中,让我们通过调用AO实现一个缓冲区分析的功能。
首先,我们需要配置一个地图服务资源,还是用前面使用过的世界地图服务吧,但是这次采用的是Local方式去连接,你可以直接在打开的JSP页面上右键选择【ArcGIS】-【Configure Map Service…】菜单打开服务配置窗口:
图 27 使用IDE插件配置 Local方式连接的服务
下面我们在一个Tool中通过这个AGSLocalMapResource来调用AO:
public class BufferPointToolAction implements MapToolAction
{
public void execute(MapEvent event) throws Exception
{
WebContext webContext = event.getWebContext();
AGSLocalMapResource agsLocalMapResource = (AGSLocalMapResource)webContext.getResourceById("ags1");
IServerContext serverContext = agsLocalMapResource.getServerContext();
WebPoint webPoint = (WebPoint)event.getWebGeometry().toMapGeometry(webContext.getWebMap());
Point point = (Point)AGSUtil.toAGSGeometry (webPoint);
Object objPoint = AGSLocalUtil.createArcObjectFromStub (point, serverContext);
ITopologicalOperator topologicalOperator = (ITopologicalOperator)objPoint;
IPolycurve objPolygon = (IPolycurve)topologicalOperator.buffer(10);
objPolygon.densify(-1, -1);
PolygonN polygonN = (PolygonN)AGSLocalUtil.createStubFromArcObject (objPolygon, PolygonN.class , serverContext);
WebPolygon webPolygon = (WebPolygon)AGSUtil.fromAGSGeometry (polygonN);
WebSimplePolygonSymbol symbol = new WebSimplePolygonSymbol();
symbol.setAntialiasing(true );
symbol.setFillTransparency(0.7);
symbol.setColor("0,255,0");
symbol.setFillColor("255,0,0");
WebGraphics webGraphics = webContext.getWebGraphics();
GraphicElement element = new GraphicElement();
element.setGeometry(webPolygon);
element.setSymbol(symbol);
webGraphics.addGraphics(element);
webContext.refresh();
}
}
当用户在浏览器中的地图上点击的时候,我们可以获得一个WebPoint类型的ADF对象,首先需要把这个对象转化为AO对象,这里必须通过两步走的方法:第一步把ADF对象转化为SOAP对象,第二步把SOAP对象转化为AO对象。具体可以参考上面的代码,主要使用了AGSUtil和AGSLocalUtil工具类的两个方法。
当我们得到AO的点以后,就可以使用AO的方法对要素进行处理了,关于AO的处理这里就省略了,关键在于处理完成以后,你还需要把AO对象的结果转化为ADF对象,同样,也需要两步方法,具体见上面的代码。
最后,让我们看一下这个通过AO实现的点击缓冲功能的效果:
图 28 调用AO实现的缓冲效果