<fx:Declarations>
??<!-- 将非可视元素(例如服务、值对象)放在此处 -->
??<!-- 几何分析(相交)所用-->
??<esri:GeometryService id="geoSer" url="" intersectComplete="geoSer_intersectCompleteHandler(event)" fault="geoSer_faultHandler(event)" />
??<!--查询featureLayer的几何信息所用-->
??<esri:QueryTask id="qt1" showBusyCursor="true" useAMF="false" url="" />
??<esri:Query id="q1" outSpatialReference="{myMap.spatialReference}" returnGeometry="true" />
??
?</fx:Declarations>
<esri:Map id="myMap" logoVisible="false" zoomSliderVisible="false" scaleBarVisible="true"?>
??<esri:ArcGISDynamicMapServiceLayer id="baseLayer" visible="false" load="callHtml()"/>
??<esri:FeatureLayer id="featureLayer"?? visible="true"? graphicAdd="featureLayer_graphicAddHandler(event)"/>
??<esri:GraphicsLayer id="graphicsLayer" visible="true"/>
?</esri:Map>
<s:Button id="btnFX" label="分析实际海域" click="fx(event)" />
?
Script:
private var arr:Array=null;
???private var arrSName:Array=null;
???private var strVal:String = "";
???private var index:int = 0;
//在页面加载的时候查询featurelayer的几何信息存储在arr、名称存储在?arrSName,便于在相交是获取到对应的名称
???private function doQuery():void
???{
????qt1.url=featureLayer.url.replace("FeatureServer","MapServer");
????
????q1.where="1=1";
????q1.outFields= new Array(["海域名称"]);
????
????qt1.execute(q1,new AsyncResponder(onResult,onFault));
????function onResult(featureSet:FeatureSet,token:Object = null):void
????{
?????// No code needed in this simple sample,since the
?????// graphics layer is bound to the query result using
?????// graphicProvider="{queryTask.executeLastResult.features}"
?????
?????var arrNew:Array = new Array(featureSet.features);
?????arr = new Array();
?????arrSName= new Array();
?????for(var i:int =0;i < arrNew[0].length;i++)
?????{
??????arr.push(arrNew[0][i].geometry);
??????
??????arrSName.push(arrNew[0][i].attributes.海域名称);
?????}
????}
????function onFault(info:Object,token:Object = null):void
????{
?????Alert.show(info.toString(),"Query Problem");
????}
???}
?
//线与各面相交后的结果
???protected function geoSer_intersectCompleteHandler(event:GeometryServiceEvent):void
???{
????
????// TODO Auto-generated method stub arrVal为面几何对象为featurelayer、arrSName为存储的海域名称、arrArea存储了面名称信息为下拉框的源数据
????var arrVal:Array = event.result as Array;
????for(var i:int =0;i < arrVal.length;i++)
????{
?????var myPolygon:Polyline = arrVal[i] as Polyline;
?????//若相交的对象不为空
?????if(myPolygon.extent.xmax > 0 )
?????{
??????var d:Extent =myPolygon.extent;
??????arrdg1[index].AreaName=arrSName[i].toString();
??????
??????for (var j:int = 0;j < arrArea.length;j ++)
??????{
???????if(arrArea[j].label==arrdg1[index].AreaName)
???????{
????????arrdg1[index].SIndex = j;
????????dg1.dataProvider=arrdg1;
????????break;
???????}
??????}
??????break;
?????}
????}
????index ++;
????
????if(index== arrdg1.length)
????{
?????//光标忙绿状态移除
?????CursorManager.removeBusyCursor();
????}?????
???}
?
public function fx(event:MouseEvent):void
???{
//光标忙绿状态设置 ????CursorManager.setBusyCursor(); ???? ????strVal= "";//清空 ????index=0; ????for(var i:int = 0;i < graphicsLayer.numGraphics;i++) ????{ ?????var gra:Graphic = graphicsLayer.getChildAt(i) as Graphic; ?????if(gra.id.indexOf("p_") == 0? ) ?????{ ??????//组装线用于相交面对象得到时候相交 ??????var mp:MapPoint = gra.geometry as MapPoint; ??????var mp1:MapPoint =new MapPoint(mp.x+0.0001,mp.y+0.0001); ??????var mp2:MapPoint =new MapPoint(mp.x-0.0001,mp.y-0.0001); ?????? ??????var p:Polyline = new Polyline(new Array([mp2,mp,mp1]),myMap.spatialReference); ?????? ??????if(index % 4 ==0) ???????strVal += gra.id.substr(2)+":{"+ index +"}n "; ??????else ???????strVal += gra.id.substr(2)+":{"+ index +"} "; ?????? ??????index++; ??????geoSer.intersect(arr,p,null); ?????? ?????} ????} ???? ????index=0; ???}