ArcGIS Server 10.0+Flex API 2.5. 實現查詢定位,目標區域邊界高亮。
1.使用QueryTask獲得查詢信息。
2.將查詢結果以Graphic形式放在GraphicsLayer上。
3.對相應graphic設置Symbol,高亮顯示,使用SimpleFillSymbol、SimpleLineSymbol,其中SimpleFillSymbol設置為空,設置outline,即實現邊界高亮效果。
效果圖:

具體:
1.使用QueryTask獲得查詢信息:
where語句中格式需注意,字符的值使用單引號,數字不需單引號。
//省區域查詢
protected function button1_clickHandler():void
{
var queryTask:QueryTask=new QueryTask;
var query:Query=new Query();
queryTask.url="http://192.168.100.226:8399/arcgis/rest/services/abs_cni/ChinaRegion/MapServer/2";
query.returnGeometry=true;
query.outFields = ["name"];
query.outSpatialReference = map.spatialReference;
query.where="name like '%"+sheng.text+"%'";
queryTask.execute(query,new AsyncResponder(onResult,onFault));
}
2.將查詢結果以Graphic形式放在GraphicsLayer上,並定位(居中顯示),即獲得查詢結果graphic的extent。
可能在瀏覽器上居中顯示時,區域邊界部分顯示不完全,可以將區域放大,即“map.extent = graphic.geometry.extent.expand(1.5);”,代表將范圍在原有基礎上擴大50%。
此處犯過兩個錯誤:
(1).使用以下方法,實質獲得graphic之和的extent。
var graphicProvider:ArrayCollection = myGraphicsLayer.graphicProvider as ArrayCollection;
var graphicsExtent:Extent = GraphicUtil.getGraphicsExtent(graphicProvider.toArray());
(2).結果函數里忘記清除之前graphic,即“myGraphicsLayer.clear();”,這樣一來,由於之前查詢結果的graphic的影響,多次查詢后extent也是錯誤的。
改正后正確方法如下:
private function onResult(featureSet:FeatureSet,token:Object = null):void
{
for each(var graphic:Graphic in featureSet.features)
{
myGraphicsLayer.clear();
graphic.symbol=QuerySymbol;
myGraphicsLayer.add(graphic);
map.extent = graphic.geometry.extent.expand(1.5);
}
}
private function onFault(info:Object, token:Object = null ):void
{
Alert.show("Error!");
}
3.設置高亮顯示的symbol,面符號中可設置為空,加上outline,這樣即可邊界高亮顯示。
<esri:SimpleFillSymbol id="QuerySymbol" color="0xFF0000" alpha="0.6" outline="{sls}" style="null"> </esri:SimpleFillSymbol> <esri:SimpleLineSymbol id="sls" color="0xFF0000" alpha="1" style="solid"> </esri:SimpleLineSymbol>
另:如果使用FlexViewer,單獨做成widget的話,別忘了設置widget初始化函數加載graphicslayer,以及關閉wigdet時的清除graphic(“myGraphicsLayer.clear();”)
