1、发现了map的extent和spatial的重要性,没有这个话,会出现好多问题。就比如说我做的identify,在没加这个之前只有点是可以做的,线和面就不可以做,加上之后就都可以了,当然了中间identifyparametr也要设置spatial的。
2、identifytask要显示多个属性可以用以下代码设置
var resultGraphic:Graphic=result.feature; datas.push({"objectID":resultGraphic.attributes.OBJECTID,"BM":resultGraphic.attributes.BM});
正确代码如下:
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:esri="http://www.esri.com/2008/ags"> <mx:ToggleButtonBar id="toolBar" y="10" x="33" itemClick="itemClickHandler(event)"> <mx:dataProvider> <mx:Array> <mx:Object icon="{point}"/> <mx:Object icon="{polyline}"/> <mx:Object icon="{polygon}"/> </mx:Array> </mx:dataProvider> </mx:ToggleButtonBar> <esri:Draw id="drawTool" map="{myMap}" graphicsLayer="{myGraphicLayer}" drawEnd="drawEndHandler(event)"/> <esri:Map id="myMap" logoVisible="false" x="33" y="40" borderStyle="solid" borderThickness="3" width="1000"> <esri:extent> <esri:Extent xmin="12662321.494300" ymin="4347904.020700" xmax="13341250.439500" ymax="5041318.416200"> <esri:SpatialReference wkid="102113"/> </esri:Extent> </esri:extent> <esri:ArcGISDynamicMapServiceLayer id="myDynamicLayer" url="http://localhost/ArcGIS/rest/services/ggg/MapServer" complete="mapHandler(event)"/> <esri:GraphicsLayer id="myGraphicLayer" symbolFunction="{symbolFunctionHandler}"/> </esri:Map> <mx:ComboBox id="layerList" x="500" y="10"/> <esri:SimpleLineSymbol id="sls" style="solid" color="#000000" width="2" alpha="1"/> <esri:SimpleMarkerSymbol id="sms" style="diamond" color="#000000" size="15"/> <esri:SimpleFillSymbol id="sfs" /> <esri:IdentifyTask id="myIdentifyTask" url="http://localhost/ArcGIS/rest/services/ggg/MapServer" identifyComplete="identifyCompleteHandler(event)"> </esri:IdentifyTask> <mx:DataGrid id="datalist" borderStyle="solid" borderThickness="3" borderColor="#1B67D9" y="40" left="1035"/>
<mx:Script> <![CDATA[ import mx.messaging.management.Attribute; import com.esri.ags.tasks.IdentifyResult; import com.esri.ags.events.IdentifyEvent; import com.esri.ags.tasks.IdentifyParameters; import com.esri.ags.events.DrawEvent; import mx.events.ItemClickEvent; import com.esri.ags.geometry.Geometry; import com.esri.ags.symbol.Symbol; import com.esri.ags.Graphic; import com.esri.ags.layers.LayerInfo; import mx.controls.Alert; [Bindable] [Embed(source="assets/measure-point.png")] public var point:Class; [Bindable] [Embed(source="assets/measure-line.png")] public var polyline:Class; [Bindable] [Embed(source="assets/measure-poly.png")] public var polygon:Class; //获取图层的名字加到combox上,在图层加载完成后执行 private function mapHandler(event:Event):void { var layersinfo:Array; layersinfo=myDynamicLayer.layerInfos; var myLayers:Array=new Array(); //遍历图层数组,将图层的名字和index加载 var i:int; for( i=0;i<layersinfo.length;i++) { myLayers.push({label:layersinfo[i].name,data:i});//?????? } //给combox绑定数据源 layerList.dataProvider=myLayers; } //这个功能是当有元素添加到GraphicsLayer时进行元素显示样式的设置, private function symbolFunctionHandler(myGraphic:Graphic):Symbol { var result:Symbol; //根据元素的类型进行显示图像的设置 switch(myGraphic.geometry.type) { case Geometry.MAPPOINT: { result=sms; break; } case Geometry.POLYLINE: { result=sls; break; } case Geometry.POLYGON: { result=sfs; break; } } return result; } //toolBar private function itemClickHandler(event:ItemClickEvent):void { switch(event.index) { case 0: { drawTool.activate(Draw.MAPPOINT); break; } case 1: { drawTool.activate(Draw.POLYLINE); break; } case 2: { drawTool.activate(Draw.POLYGON); break; } } } //drawEnd事件 private function drawEndHandler(event:DrawEvent):void { //获取查询结果geometry var myGraphic:Graphic=event.graphic; var myGeometry:Geometry=event.graphic.geometry; var identifyPara:IdentifyParameters=new IdentifyParameters(); //查询需要返回的Geometry identifyPara.returnGeometry=true; identifyPara.tolerance=1; identifyPara.width=myMap.width; identifyPara.height=myMap.height; //设置查询的geometry identifyPara.geometry=myGeometry;
//一定要设置的spatialReference identifyPara.spatialReference=myMap.spatialReference; var myLayer:Array=new Array(); myLayer.push(layerList.value); identifyPara.layerIds=myLayer; // Alert.show(identifyPara.layerIds.toString()); //查询可见图层 identifyPara.layerOption=IdentifyParameters.LAYER_OPTION_VISIBLE; identifyPara.mapExtent=myMap.extent; //进行查询 myIdentifyTask.execute(identifyPara); // Alert.show("123"); } //查询完成后执行的事件 private function identifyCompleteHandler(event:IdentifyEvent):void { // Alert.show("456"); var datas:Array=new Array(); //遍历查询结果把查询到的feature添加到GraphicsLayer进行高亮显示 //同时把查询到的元素的名称添加到datas对象数组用来DataGrid显示用 var result:IdentifyResult; for each(result in event.identifyResults) { myGraphicLayer.add(result.feature); // datas.push({"value":result.value}); //实现多个字段的添加 var resultGraphic:Graphic=result.feature; datas.push({"objectID":resultGraphic.attributes.OBJECTID,"BM":resultGraphic.attributes.BM}); } //设置datalist的数据源 datalist.dataProvider=datas; } ]]> </mx:Script></mx:Application>