内容摘要
ArcGIS Server中提供了把地图文件输出成图片保存的接口,除了地图服务中已有的要素外,用户可能还会在地图上添加一些自定义的标注,比如鼠标操作添加的点、线、多边形、文字甚至图片。文章介绍了如何在输出保存的图片中保存用户自定义的标注。
过程描述
     ArcGIS Server中提供了把地图文件输出成图片保存的接口,除了地图服务中已有的要素外,用户可能还会在地图上添加一些自定义的标注,比如鼠标操作添加的点、线、多边形、文字甚至图片。在地图输出的时候,这部分内容如何保留下来呢?
     在地图上添加自定义标注,最常用的方法是用com.esri.adf.web.data.WebGraphics.addGraphics(GraphicElement elem),但是这个方法添加的标注在输出地图的时候没法直接使用。我们可以先看一看地图输出的接口:
      com.esri.arcgisws.MapServerPort.exportMapImage(com.esri.arcgisws.MapDescription mapDescription, com.esri.arcgisws.ImageDescription imageDescription)
   
其中ImageDescription设置了图片输出的参数,包括ImageType(图片格式与返回类型:MIMEData or URL)和ImageDisplay(图片分辨率、高度、宽度等);MapDescription设置了地图的参数,包括图层、输出范围以及自定义内容(CustomGraphics),这里的自定义内容指的就是用户在地图上添加的自定义标注。
     因此,如果想在地图输出时包含用户自定义的标注,最好是使用MapDescription的接口来添加这些标注,添加的方法与WebGraphics大同小异,下面是一段使用MapDescription添加一个标注的代码:
        //get the mapResource so we can get to the MapDescription
        AGSMapResource mapResource = (AGSMapResource) webContext.getResources().get("ags0");       
        AGSMapFunctionality mapFunctionality = (AGSMapFunctionality) mapResource.getFunctionality("map");
        MapDescription mapDescription = mapFunctionality.getMapDescription();
       
        //Get any existing graphic elements from the map description
        GraphicElement[] existingElements = mapDescription.getCustomGraphics();
       
        GraphicElement[] graphicElements = null;
        if(existingElements == null){
            graphicElements = new GraphicElement[1];
        } else {
            //there were already graphic elements so we need to copy them to our array
            graphicElements = new GraphicElement[existingElements.length + 1];
            System.arraycopy(existingElements, 0, graphicElements, 0, existingElements.length );
        }
       
        //make a marker element and set it's properties
        MarkerElement markerElement = new MarkerElement();
        PointN pointN = new PointN(point.getX(), point.getY(), null, null, null, null);
        markerElement.setPoint(pointN);
       
        //make a marker symbol for the element
        SimpleMarkerSymbol markerSymbol = new SimpleMarkerSymbol();   
        markerSymbol.setSize(15.0);
        markerSymbol.setStyle(EsriSimpleMarkerStyle.esriSMSCircle);
        RgbColor color = new RgbColor();
        color.setAlphaValue(new UnsignedByte(255));
        color.setBlue(new UnsignedByte(0));
        color.setRed(new UnsignedByte(255));
        color.setGreen(new UnsignedByte(0));
        markerSymbol.setColor(color);
        markerSymbol.setOutlineColor(color);
       
        markerElement.setSymbol(markerSymbol);
       
        //add the markerElement to the array of graphicElements
        graphicElements[graphicElements.length-1] = markerElement;
       
        //set the custom graphics, this is a remote call
        mapDescription.setCustomGraphics(graphicElements);
       最后,如果要输出地图,只需要从MapFunctionality里取出MapDescription就可以了。

posted on 2008-06-15 15:26  zhupeng  阅读(2630)  评论(3编辑  收藏  举报