flex中的查询定位

1、需要注意的要查询的图层具有查询功能,这个你可以在http://localhost/ArcGIS/rest/services里找到你的服务,选择具体的图层,最底下有一个query layer,在里面可以查查试一试。如果这里面都查不了,程序肯定查不了。

2、我出现的问题就是有的图层可以查询有的不可以,捣鼓半天才发现查不了的图层的空间信息屏蔽了。查询定位没空间信息当然会出错了,错误就是当需要把空间图形加载到graphicLayers时候就提示对象为空10094错误,后来把图层的空间信息全部显示,再发布服务,就oK了。

3、有时候新发布的服务在rest地址里是不存在的,关机重新启动OK了。

 

<?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:Canvas width="1000" height="500" x="33" y="50" borderStyle="solid" borderThickness="3" borderColor="#D67D8">  
  <esri:Map id="myMap">
     <esri:ArcGISTiledMapServiceLayer url="http://localhost/ArcGIS/rest/services/tileMap2/MapServer"/>
     <esri:ArcGISDynamicMapServiceLayer id="myDynamicServiceLayer" url="http://localhost/ArcGIS/rest/services/myMap/MapServer" creationComplete="loadMapLayer(event)" >
        <esri:visibleLayers>
          <mx:ArrayCollection>           
          </mx:ArrayCollection>
        </esri:visibleLayers>
     </esri:ArcGISDynamicMapServiceLayer>
   <esri:GraphicsLayer id="myGraphicLayer"  symbolFunction="{mySymbolFunction}" />
  </esri:Map>  
 </mx:Canvas>
 <esri:SimpleMarkerSymbol id="sms" style="circle" color="#000000" alpha="1" size="30"/>
 <esri:SimpleLineSymbol id="sls" style="solid" color="#000000" alpha="0.6" width="5"/>
 <esri:SimpleFillSymbol id="sfs" color="0x0000FF" alpha="0.6"/>
 
 <mx:Canvas width="1000" height="30" x="33" y="10" borderStyle="solid" borderThickness="3" borderColor="#D67D8">
  <mx:ComboBox id="layerList" x="10" y="3" width="117"/>
  <mx:TextInput id="qText" x="135" y="3" width="233"  enter="doQuery()"  text="XIAN like '长安%'"/>
  <mx:Button x="370" y="3" label="查询"  fontSize="12" height="22" click="doQuery()"/>
 </mx:Canvas>
 <mx:DataGrid id="resultTable" change="clickHandler(event)" y="10" x="1035" height="500" borderStyle="solid" borderThickness="3" borderColor="#D67D8"/>
 
 <esri:QueryTask id="queryTask">  

 </esri:QueryTask>
 
 <esri:Query id="query" />
<mx:Script>
  <![CDATA[
   import com.esri.ags.geometry.Polygon;
   import com.esri.ags.geometry.Polyline;
   import com.esri.ags.geometry.MapPoint;
   import com.esri.ags.events.ExtentEvent;
   import com.esri.ags.geometry.Extent;
   import mx.events.ListEvent;
   import com.esri.ags.tasks.FeatureSet;
   import mx.rpc.AsyncResponder;
   import com.esri.ags.symbol.Symbol;
   import com.esri.ags.Graphic;
   import com.esri.ags.geometry.Geometry;
    import mx.controls.Alert;
   
    private function loadMapLayer(event:Event):void
    {
      //获取图层信息
      var myLayersInfos:Array;
      myLayersInfos=myDynamicServiceLayer.layerInfos;
      var myLayers:Array=new Array();
      for(var i:int=0;i<myLayersInfos.length;i++)
      {
        myLayers.push({label:myLayersInfos[i].name,data:i});
      }
      //给combobox绑定数据源
      layerList.dataProvider=myLayers;
    }
        private function mySymbolFunction(myGraphic:Graphic):Symbol
    {
      var result:Symbol;                     
      switch(myGraphic.geometry.type)
      {
        case Geometry.MAPPOINT://添加引用包geometry.Geometry
        {
         result=sms;
         break;
        }
          case Geometry.POLYLINE://添加引用包geometry.Geometry
        {
         result=sls;
         break;
        }
          case Geometry.POLYGON://添加引用包geometry.Geometry
        {
         result=sfs;
         break;
        }
      }
      return result;
    }
   
    private function doQuery():void
    {
      //清除高亮显示
     // myGraphicLayer.clear();
      //设置查询任务的URL,就是设置要查询的图层
      queryTask.url="http://localhost/ArcGIS/rest/services/myMap/MapServer/"+layerList.value;
     // Alert.show(queryTask.url);
      //设置查询语句
      query.where=qText.text;
   //  query.where=" 名称 like '%岗%'";
  // query.where="育龄妇女 >=  139413";
   //  query.where= "objectid=2";
      //Alert.show(qText.text);
      //查询结果返回geometr
      query.returnGeometry=true;   
     
      query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
      //设置查询的字段
      var fields:Array=new Array();   
     fields.push("OBJECTID");
     fields.push("XIAN");
     fields.push("HL");
    //  fields.push("育龄妇女");
      query.outFields=fields;
      //执行查询
      queryTask.execute(query,new AsyncResponder(onResult,onFault));
    }
   
   
    private function onResult(featureSet:FeatureSet,token:Object=null):void
    {
      var resultList:Array=new Array();
      //myGraphicLayer.graphicProvider=featureSet.features;
      var myGraphics:Graphic;
      for each( myGraphics in featureSet.features)
      {
        myGraphicLayer.add(myGraphics);       
        resultList.push({"objectID":myGraphics.attributes.OBJECTID,"县名":myGraphics.attributes.XIAN,"HL":myGraphics.attributes.HL});
        //resultList.push({"name":myGraphics.attributes.名称,"ID":myGraphics.attributes.OBJECTID,"育龄妇女":myGraphics.attributes.育龄妇女});
      }
      // 给grid设置数据源
    resultTable.dataProvider=resultList;   
    }
   
   
    private function onFault(info:Object,token:Object=null):void
    {
       Alert.show("error!!!!!!");
    }
    //grid点击事件进行定位居中中显示
    public function clickHandler(event:ListEvent):void
    {
     //获取点击的行的id
     var idStr:String=event.itemRenderer.data.objectID;
     //Alert.show(idStr);
     queryTask.url="http://localhost/ArcGIS/rest/services/myMap/MapServer/"+layerList.value;
     //是否返回图形
     query.returnGeometry=true;
     query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
     //query.where="name like '%"+idStr+"%'";
     query.where="OBJECTID="+idStr;
     
     queryTask.execute(query,new AsyncResponder(onResult2,onFault));
     
    }
   
    private function onResult2(featureSet:FeatureSet,tojen:Object):void
    {
     
     var resultList:Array=new Array();
     //var myGraphic1:Graphic=featureSet.features[0];
     for each( var myGraphic:Graphic in featureSet.features)
     {
       myGraphicLayer.add(myGraphic);
       var geo:Geometry=myGraphic.geometry;
       var ext:Extent=new Extent();
       switch(myGraphic.geometry.type)
       {
         case Geometry.MAPPOINT:
         {
          //转成点
          var pnt:MapPoint=geo as MapPoint;
          //定位中心
          myMap.centerAt(pnt);
          break;
         }
         case Geometry.POLYLINE:
         {
          //转成线
          var pline:Polyline=geo as Polyline;
          //设置地图的视图范围
          ext=pline.extent;
          myMap.extent=ext;
          break;
         }
        
          case Geometry.POLYGON:
         {
          //转成线
          var poly:Polygon=geo as Polygon;
          //设置地图的视图范围
          ext=poly.extent;
          myMap.extent=ext;
          break;
         }
          default:
          {
           break;
          }
        
       }
     }
      
    }
   
  ]]>
 </mx:Script>
 
</mx:Application>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值