ArcGIS Server Java ADF 案例教程 30
GraphicRenderer
上一小节我们知道怎样给GraphicElement指定WebSymbol来进行符号化,这里我们讲讲如何对WebGraphics进行设置,让它可以按照一定的规则自动将前面查询到的结果进行不同的渲染。
WebGraphis有个addRenderer方法,它可以添加GraphicRenderer 对象,这个GraphicRenderer对象是几何对象的渲染器,它有一个renderer属性用以存放真正的符号渲染接口——WebRenderer,因此,它可以遵循某些规则对几何对象的集合进行渲染。
有这几个类实现了WebRenderer接口:WebSimpleRenderer 、WebClassBreaksRenderer、WebUniqueValueRenderer。看到这些名称你是不是感觉很熟悉?下面我们就通过WebUniqueValueRenderer来实现对查询结果中所有的QueryResult进行按值渲染。
ArrayList geometries = new ArrayList();
ArrayList values = new ArrayList();
for (int i = 0; i < listQueryResult.size(); i++)
{
QueryResult queryResult = listQueryResult.get(i);
geometries.add(queryResult.getHighlightGeometry());
values.add(queryResult.getDetails().get("POP_RANK").toString());
}
WebUniqueValueRenderer wuvr = new WebUniqueValueRenderer();
wuvr.setField1("POP_RANK");
wuvr.setDefaultSymbol(symbol);
ArrayList infos = new ArrayList(2);
WebSimpleMarkerSymbol s1 = new WebSimpleMarkerSymbol();
s1.setColor("0,0,255");
s1.setWidth(25);
s1.setMarkerType(WebSimpleMarkerSymbol.CIRCLE );
WebUniqueValueInfo uvi = new WebUniqueValueInfo("", "", "1", s1);
infos.add(uvi);
WebSimpleMarkerSymbol s2 = new WebSimpleMarkerSymbol();
s2.setColor("0,255,0");
s2.setWidth(25);
s2.setMarkerType(WebSimpleMarkerSymbol.CIRCLE );
uvi = new WebUniqueValueInfo("", "", "2", s2);
infos.add(uvi);
wuvr.setUniqueValueInfos(infos);
GraphicRenderer graphicRenderer = new GraphicRenderer();
graphicRenderer.setRenderer(wuvr);
graphicRenderer.setGeometries(geometries);
graphicRenderer.setValues(values);
webGraphics.addRenderer(graphicRenderer);
webContext.refresh();
从上面的代码我们可以看到,我们首先需要做的准备工作就是遍历QueryResult的集合,生成几何对象的集合geometries和需要分值渲染的值的集合values;然后,我们需要一个WebUniqueValueRenderer对象来定义分值渲染的规则,比如某值需要渲染成某符号等等;当这些准备工作完成以后,GraphicRenderer就登场了,前面的准备工作都会被放到GraphicRenderer中去,再把这个GraphicRenderer对象添加到WebGraphics后,刷新WebContext的同时ADF就会根据前面定义的规则,将这些查询结果分别渲染成不同的符号并添加到地图上。
下面是这个分值渲染的效果: