内容摘要 | |||||
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) 因此,如果想在地图输出时包含用户自定义的标注,最好是使用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就可以了。 |