ArcGIS Server Java讲座-空间查询和高亮显示的实现

ArcGIS Server Java讲座-空间查询和高亮显示的实现

ESRI在JAVA ADF中做了很多的工作,其中很重要的一个部分是WebQuery。WebQuery用来对ArcGISServer和ArcIMS进行查询,然后在ADF这一端对地图进行渲染。比如说高亮显示,用图片进行渲染等等。
我们来看一个简单的选中,并把选中结果进行高亮显示的开发过程。

事实上选中可以用两种方法,第一种是空间选择,第二种是文本查询,这两种选中都可以。ESRI也提供了进行这两种查询的两个类,这两个类都继承自同一个接口,我们来看一下:
这个类是IdentifyCriteria, TextCriteria,接口是QueryCriteria,QueryCriteria可以设置一些比如最大返回记录,是否返回记录的详细信息等设置。如名所示,IdentifyCriteria用来对数据进行空间查询,我们来看一下,如何使用这个类:

  
IdentifyCriteria ic = new IdentifyCriteria(geom);


   geom是一个WebGeometry类的实例,它可以从客户端触发的MapEvent类中得到。

  创建了这个IdentifyCriteria之后,就可以进行查询了,查询是由WebQuery来完成的,所以先要得到WebQuery:


WebQuery query = (WebQuery) context.getAttribute("query");


  大家打开faces-config.xml,mapContext里面由没有query,如果有,用上面的代码就可以得到WebQuery。

  得到了WebQuery,就可以大干一场了,可以用下面的办法进行空间查询:


List    results=query.query(ic,lyrList);


ic就是IdentifyCriteria,lyrList是一个查询目标层的列表,目标层可以是一个,也可以是多个,比如可以用下面的方法得到所有可以查到的图层:



public  ArrayList getQueryLayers(){

if(layers != null) return layers;

layers= new ArrayList();

WebQuery wQuery = this.context.getWebQuery();

WebLayerInfo layerInfo = null;

if(wQuery != null){

List layerList = wQuery.getQueryLayers();

for(Iterator iter = layerList.iterator(); iter.hasNext(); ) {
   
Object item = (Object) iter.next();
     if(item instanceof WebLayerInfo){
         layerInfo = (WebLayerInfo)item;
        layers.add(new SelectItem(layerInfo, layerInfo.getName()));

}

      }


    }

return layers;

  }


   当然,如果你不想查所有的图层,也可以让用户进行选择,选择哪个需要查询的图层。

  现在来说说查询返回的结果,我们可以看到结果是一个List,List里面是什么?List里面的对象是QueryResult.

  你可以循环得到里面的每一个QueryResult,并把它们高亮显示:


   

for(int ii=0;ii<results.size();ii++){
   
result = (QueryResult) results.get(ii);
   
result.highlight();

}


Highlight采用什么颜色,什么标志进行高亮显示,也是我们可以自己控制的,我个人的喜好是用红色,跟张艺谋一个水准,我们可以把显示符合加到query里面:



WebSimpleMarkerSymbol markers = query.getPointGraphicSymbol();

if (markers == null ) {
   
markers = new WebSimpleMarkerSymbol();
  
query.setPointGraphicSymbol(markers);

}     



markers.setAntialiasing(true);

markers.setColor("255,0,0");

markers.setOutlineColor("255,0,0");



markers.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);




同样,你可以设置线的颜色和多边形的颜色。这样就可以按照你需要的颜色进行高亮显示了。

  当然QueryResult的功能不止能高亮显示,你还可以得到查询结果集的每一个字段的值,用result.getDetails()方法即可得到一个Map,里面有所有结果的字段名和字段值。

   最后有说明的是,以上所有的代码对于ArcGIS Server和ArcIMS都同样适用,Enjoy。

你可能感兴趣的:(ArcGIS Server Java讲座-空间查询和高亮显示的实现)