Server Java----空間クエリーとハイライト表示の実装


ESRIはJAVA ADFで多くの仕事をしており、その重要な部分はWebQueryである.WebQueryは、ArcGISServerとArcIMSをクエリーし、ADF側で地図をレンダリングするために使用されます.たとえば、ハイライト表示したり、画像でレンダリングしたりします.
簡単な選択を見て、選択結果をハイライト表示する開発プロセスを見てみましょう.
実際に選択するには、2つの方法があります.1つ目は空間選択、2つ目はテキストクエリーです.この2つの選択は可能です.ESRIでは、同じインタフェースから継承されている2つのクラスのクエリも提供されています.
このクラスはIdentifyCriteria、TextCriteria、インタフェースはQueryCriteria、QueryCriteriaは最大リターンレコード、レコードの詳細を返すかどうかなどの設定ができます.名前に示すように、IdentifyCriteriaはデータの空間クエリーに使用されます.このクラスの使用方法を見てみましょう.
IdentifyCriteria ic = new IdentifyCriteria(geom);

  geomは、クライアントがトリガしたMapEventクラスから入手できるWebGeometryクラスのインスタンスです.
  この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はクエリーターゲット層のリストであり、ターゲット層は1つであってもよいし、複数であってもよい.例えば、以下の方法で調べられるすべてのレイヤを得ることができる.
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;
}

   もちろん、すべてのレイヤーを調べたくない場合は、ユーザーにクエリーが必要なレイヤーを選択させることもできます.
  クエリーが返す結果として、結果がリストであることがわかります.リストの中には何が入っていますか.リスト内のオブジェクトは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について説明する.