ArcGIS缓冲区分析小例子

来源:互联网 发布:淘宝卖女装货源 编辑:程序博客网 时间:2024/05/16 10:25

 

<?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" minWidth="955" minHeight="600" xmlns:esri="http://www.esri.com/2008/ags">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
  <esri:GeometryService id="myGeometryService" url="http://192.168.1.15:8399/arcgis/rest/services/Geometry/GeometryServer"/>
  <esri:IdentifyTask id="identifyTask" executeComplete="identifyCompleteHandler(event)" fault="identifyTask_faultHandler(event)"  url="http://192.168.1.15:8399/arcgis/rest/services/SQYF/MapServer"/>
  <esri:SimpleFillSymbol id="sfs" color="0xFF0000" alpha="0.6"/>
  <esri:DrawTool id="drawToolbar" map="{myMap}" graphicsLayer="{myGraphicsLayer}" drawEnd="drawEndHandler(event)" /> 
 </fx:Declarations>
 <fx:Script>
  <![CDATA[
   import com.esri.ags.Graphic;
   import com.esri.ags.SpatialReference;
   import com.esri.ags.events.DrawEvent;
   import com.esri.ags.events.GeometryServiceEvent;
   import com.esri.ags.events.IdentifyEvent;
   import com.esri.ags.geometry.Geometry;
   import com.esri.ags.tasks.GeometryService;
   import com.esri.ags.tasks.supportClasses.BufferParameters;
   import com.esri.ags.tasks.supportClasses.IdentifyParameters;
   import com.esri.ags.tasks.supportClasses.IdentifyResult;
   import com.esri.ags.tools.DrawTool;
   import com.esri.ags.tools.NavigationTool;
   
   import mx.collections.ArrayCollection;
   import mx.controls.Alert;
   import mx.events.ItemClickEvent;
   import mx.messaging.management.Attribute;
   import mx.rpc.events.FaultEvent;
   import mx.utils.OnDemandEventDispatcher;
   [Bindable]
   [Embed(source="point.png")]
   public var point:Class;
   [Bindable]
   [Embed(source="line.png")]
   public var polyline:Class;
   [Bindable]
   [Embed(source="poly.png")]
   public var polygon:Class;  
    [Bindable]
   public var myDataProvider:Array = new Array();
   private var attributesArr:Array=["政区代码","政区名称","街道名称","设施编号",
                                   "项目","名称","建筑面积","用地面积","建设状态",
                                   "数据来源","建筑形式","房屋来源",""];
   [Bindable]public var resultArr:Array=[];
    
   private function itemClickHandler(event:ItemClickEvent):void
   {
    
    drawToolbar.activate(DrawTool.MAPPOINT);
    switch(event.index)
    {
     case 0:
     {
      drawToolbar.activate(DrawTool.MAPPOINT);
      break;
     }
     case 1:
     {
      drawToolbar.activate(DrawTool.POLYLINE);
      break;
     }
     case 2:
     {
      drawToolbar.activate(DrawTool.POLYGON);
      break;
     }
    }
   }
   private function drawEndHandler(event:DrawEvent):void
   {
    var myGraphic:Graphic=event.graphic;
    var geo:Geometry=event.graphic.geometry;
    
      //以下这个设置很重要,不然缓冲区构造不会成功
    geo.spatialReference = new SpatialReference(102113);
    
    
    //设置buffer参数
    var bufferParameters : BufferParameters = new BufferParameters();
    bufferParameters.geometries=[geo];
    //buffer距离半径
    bufferParameters.distances = [50];
    //buffer单位
    bufferParameters.unit = GeometryService.UNIT_METER;
    //buffer空间参照系,102113为WKID是REST API定义好的空间参照系的id
    bufferParameters.bufferSpatialReference = new SpatialReference(102113); 
    bufferParameters.outSpatialReference = new SpatialReference(102113);
    //添加BUFFER_COMPLETE监听
    myGeometryService.addEventListener(GeometryServiceEvent.BUFFER_COMPLETE, bufferCompleteHandler); 
    myGeometryService.addEventListener(FaultEvent.FAULT, FaultHandler); 
    //进行buffer分析
    myGeometryService.buffer( bufferParameters );
    
    
    
    
    }
   
   
   private function FaultHandler(event:FaultEvent):void
   {
    Alert.show("sorry,GeometryServiceErro");
    myGeometryService.removeEventListener(FaultEvent.FAULT,FaultHandler);
   }

   //buffer完成后调用方法
   private function bufferCompleteHandler( event : GeometryServiceEvent ) : void
   {
    
    myDataProvider=[];
    myGraphicsLayer.clear();
    //移除BUFFER_COMPLETE监听
    myGeometryService.removeEventListener(GeometryServiceEvent.BUFFER_COMPLETE,bufferCompleteHandler);
    //获取buffer结果Graphic
    for each (var geometry:Geometry in event.result)
    {
     var graphic:Graphic = new Graphic();
     graphic.geometry = geometry;
     //设置显示样式
     graphic.symbol = sfs;
     //添加到GraphicsLayer进行显示
     myGraphicsLayer.add( graphic );
     
     
     
     var identifyParams:IdentifyParameters=new IdentifyParameters();
     //查询结果需要返回Geometry
     identifyParams.returnGeometry=true;
     //查询冗余范围
     identifyParams.tolerance=5;
     //宽
     identifyParams.width = myMap.width;
     //高
     identifyParams.height = myMap.height;
     //设置查询的Geometry
     identifyParams.geometry=geometry;
     //从ComboBox获取选择的图层index设置要查询的图层 
     //查询图层id为2的图层,就是States层
     identifyParams.layerIds=[2,6,9,12];
     //查询可见图层
     identifyParams.layerOption=IdentifyParameters.LAYER_OPTION_ALL;
     identifyParams.spatialReference=myMap.spatialReference;
     //重点内容
     identifyParams.mapExtent=myMap.extent;
     //进行查询
     identifyTask.execute(identifyParams);

    }
   }
   
   private function faultHandler(event:FaultEvent):void
   {
    Alert.show(event.toString());
   }
   //查询完成后执行的事件
      private function identifyCompleteHandler(event:IdentifyEvent):void
   {
    
    var resultCount:int = event.identifyResults.length;
    
    
     for (var i:Number = 0; i < resultCount; i++)
     {  
      var result:IdentifyResult=event.identifyResults[i];
      var obj:Object = result.feature.attributes;
      for(var j:int=0;j<attributesArr.length;j++)
      {
         var attributesObj:Object = {cfield:attributesArr[j],cvalue:obj[attributesArr[j]]};
         resultArr.push(attributesObj);
         myDataProvider=resultArr;
      }
     
     }
    
    
   }
   
   protected function identifyTask_faultHandler(event:FaultEvent):void
   {
    // TODO Auto-generated method stub
    Alert.show("sorry,identifyErro");
   }
   
  ]]>
 </fx:Script>
 <mx:Canvas width="490" height="401" borderStyle="solid" verticalCenter="16" left="10">
  <esri:Map id="myMap" >
   <esri:ArcGISDynamicMapServiceLayer url="http://" />
   <esri:ArcGISDynamicMapServiceLayer url="http://" />
   <esri:GraphicsLayer id="myGraphicsLayer"  />
  </esri:Map>
 </mx:Canvas>
 
 <mx:ToggleButtonBar id="myNav" verticalCenter="-203"  itemClick="itemClickHandler(event)"  toggleOnClick="true" left="11">
  <mx:dataProvider>
   <fx:Array>
    <fx:Object icon="{point}" />
    <fx:Object icon="{polyline}" />
    <fx:Object icon="{polygon}" />
   </fx:Array>
  </mx:dataProvider>
 </mx:ToggleButtonBar>
 <mx:DataGrid id="myDataGrid" dataProvider="{myDataProvider}"  x="508" y="150" width="167" height="401" sortableColumns="false" >
  <mx:columns>
    <mx:DataGridColumn dataField="cfield" headerText="字段"/>
    <mx:DataGridColumn dataField="cvalue" headerText="值"/>
  </mx:columns>
 </mx:DataGrid>
</s:Application>