<?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=">
<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>