(四)使用IdentifyTask查詢圖層屬性


一、完整代碼

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:esri="http://www.esri.com/2008/ags"
               minWidth="955" minHeight="600">
    <fx:Declarations>
        <esri:DrawTool id="drawTool" map="{myMap}" graphicsLayer="{myLayer as GraphicsLayer}"
                       drawEnd="onDrawEnd(event)"/>
        <esri:IdentifyTask id="identifyTask"  url="{serverUrl}"/>
        
        <!-- Symbol for where the user clicked -->
        <esri:SimpleMarkerSymbol id="clickPtSym"
                                 color="0xFF0000"
                                 size="12"
                                 style="x"/>
        
        <!-- Symbol for Identify Result as Polyline -->
        <esri:SimpleLineSymbol id="slsIdentify"
                               width="2"
                               alpha="1"
                               color="0x00FF00"
                               style="solid"/>
        
        <!-- Symbol for Identify Result as Point -->
        <esri:SimpleMarkerSymbol id="smsIdentify"
                                 color="0x00FF00"
                                 size="15"
                                 style="diamond"/>
        <esri:SimpleFillSymbol id="sfsIdentify"/>
    </fx:Declarations>
    
    <fx:Script>
        <![CDATA[
            import com.esri.ags.Graphic;
            import com.esri.ags.events.DrawEvent;
            import com.esri.ags.geometry.Geometry;
            import com.esri.ags.geometry.MapPoint;
            import com.esri.ags.geometry.Polygon;
            import com.esri.ags.geometry.Polyline;
            import com.esri.ags.symbols.InfoSymbol;
            import com.esri.ags.tasks.supportClasses.IdentifyParameters;
            import com.esri.ags.tasks.supportClasses.IdentifyResult;
            
            import mx.controls.Alert;
            import mx.controls.DataGrid;
            import mx.events.ItemClickEvent;
            import mx.rpc.AsyncResponder;
            [Bindable]
            private var serverUrl:String="http://localhost:8399/arcgis/rest/services/TestUSA/MapServer";
            
            [Bindable]
            private var lastIdentifyResultGraphic:Graphic;
            
            protected function toolBar_Clicked(event:ItemClickEvent):void{
                switch(event.index){
                    case 0:
                        drawTool.deactivate();
                        break;
                    case 1:
                        drawTool.activate(DrawTool.EXTENT);
                        break;
                }
            }
            
            protected function onDrawEnd(event:DrawEvent):void{
                var identifyParams:IdentifyParameters=new IdentifyParameters();
                identifyParams.returnGeometry=true;
                identifyParams.tolerance=3;
                identifyParams.width = myMap.width;
                identifyParams.height = myMap.height;
                identifyParams.geometry=event.graphic.geometry;
                identifyParams.mapExtent=myMap.extent;
                /**
                 * 固定查詢第一個圖層,即高速公路,可以使用下拉框進行選擇其它圖層(需要遍歷所有圖層),查詢多個圖層
                 *      identifyParams.layerOption=IdentifyParameters.LAYER_OPTION_VISIBLE;  所有可見圖層
                 *                                                    LAYER_OPTION_ALL;      所有圖層
                 *                                                    LAYER_OPTION_TOP;      最上層
                 * */
                var layers:Array=new Array();
                layers.push(1); 
                identifyParams.layerIds=layers;

                identifyTask.execute(identifyParams, new AsyncResponder(myResultFunction, myFaultFunction, event.graphic));
            }
            
            //繪圖正常返回后
            private function myResultFunction(results:Array, clickGraphic:Graphic = null):void{
                resultGraphicsLayer.clear();
                if(results && results.length>0){
                    var attriList:Array=new Array();
                    for each (var identifyResult:IdentifyResult in results)
                    {
                        var resultGraphic:Graphic = identifyResult.feature;
                        //設置線樣試,本示例只查詢了公路,如果有多個,可以判斷點,面進行不同設置
                        resultGraphic.symbol = slsIdentify;
                        
                        //裝載一行所有屬性
                        //attriList.push(resultGraphic.attributes);
                        //裝載個別屬性
                        attriList.push({"公路名稱":resultGraphic.attributes.TYPE,"公路長度":resultGraphic.attributes.LENGTH});
                        resultGraphicsLayer.add(resultGraphic);
                    }
                    var sg:DataGrid=new DataGrid();
                    sg.width=200;
                    
                    sg.dataProvider=attriList;
                    myMap.infoWindowContent=sg;
                    myMap.infoWindow.label="高速公路信息";
                    myMap.infoWindow.show(getGeomCenter(resultGraphic));
                }
            }
            
            private function myFaultFunction(error:Object, clickGraphic:Graphic = null):void
            {
                Alert.show(String(error), "Identify Error");
            }
            
            //根據所繪圖層,得顯示氣泡的點位置
            private function getGeomCenter(graphic:Graphic):MapPoint
            {
                var pt:MapPoint;
                switch (graphic.geometry.type)
                {
                    case Geometry.MAPPOINT:
                    {
                        pt = graphic.geometry as MapPoint;
                        break;
                    }
                    case Geometry.POLYLINE:
                    {
                        const pl:Polyline = graphic.geometry as Polyline;
                        const pathCount:Number = pl.paths.length;
                        const pathIndex:int = int((pathCount / 2) - 1);
                        const midPath:Array = pl.paths[pathIndex];
                        const ptCount:Number = midPath.length;
                        const ptIndex:int = int((ptCount / 2) - 1);
                        pt = pl.getPoint(pathIndex, ptIndex);
                        break;
                    }
                    case Geometry.POLYGON:
                    {
                        const poly:Polygon = graphic.geometry as Polygon;
                        pt = poly.extent.center;
                        break;
                    }
                }
                return pt;
            }
        ]]>
    </fx:Script>
    <mx:ToggleButtonBar itemClick="toolBar_Clicked(event)">
        <mx:dataProvider>
            <fx:Array>
                <fx:String>漫游</fx:String>
                <fx:String>矩形查詢</fx:String>
            </fx:Array>
        </mx:dataProvider>
    </mx:ToggleButtonBar>
    <esri:Map x="0" y="86" width="100%" height="100%" id="myMap">
        <esri:ArcGISDynamicMapServiceLayer url="{serverUrl}" id="myLayer"/>    
        <esri:GraphicsLayer id="resultGraphicsLayer"/>
        <esri:GraphicsLayer id="clickGraphicsLayer"/>
    </esri:Map>    
</s:Application>

二、效果圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM