1.ArcGIS API for Flex实现Identify的功能,进行图查属性的功能,这样选择图层然后进行点、线、面的查询最好查到的地理元素高亮显示同时在右边的Grid中显示查到的数据。
准备工作:
1.在ArcGIS.Server.9.3发布一个叫usa的Map Service,并且把这个Service启动起来。
完成后的效果图:
开始:
1.启动Flex Builder3新建工程以及引入ArcGIS API for Flex library的开发包。
2.新建IdentifyTest.mxml页面,然后在页面上添加esri:Map控件设置esri:ArcGISDynamicMapServiceLayer等,这里还需要高亮显示被查询到的元素所以还需要esri:GraphicsLayer,具体代码如下:
1
<mx:Canvas width="490" height="311" borderStyle="solid" borderThickness="3" borderColor="#425DE2" verticalCenter="-20" x="11">
2
<esri:Map id="myMap">
3
<mx:Panel x="209" y="-10" width="250" height="200" layout="absolute">
4
</mx:Panel>
5
<esri:ArcGISDynamicMapServiceLayer id="myMapServiceLayer" url="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer" complete="mapHandler(event)"/>
6
<esri:GraphicsLayer id="myGraphicsLayer" symbolFunction="{mySymbolFunction}"/>
7
</esri:Map>
8
</mx:Canvas>
3.上面的代码中给ArcGISDynamicMapServiceLayer添加了一个complete事件用来当地图载入完成后获取地图的图层名称显示在地图上方的mx:ComboBox上,代码如下:
2
3
4
5
6
7
8
1
//获取地图图层名称和index到ComboBox上
2
private function mapHandler(event:Event):void
3
}
mx:ComboBox显示代码:
2
3
1
<mx:ComboBox id="layerList" verticalCenter="-195" x="139"></mx:ComboBox>
4.上面的GraphicsLayer也添加了一个symbolFunction的功能,这个功能是当有元素添加到GraphicsLayer时进行元素显示样式的设置,这样分别对点、线、面进行样式设定,代码如下:
1
private function mySymbolFunction(graphic:Graphic):Symbol
2
}
5.上面代码中的sms、sls、sfs是定义好的Symbol的id,具体定义如下:
2
1
<esri:SimpleLineSymbol id="sls" style="solid" color="0x00FF00" width="2" alpha="1"/>
2
<esri:SimpleMarkerSymbol id="sms" style="diamond" color="0x00FF00" size="15"/>
3
<esri:SimpleFillSymbol id="sfs"/>
6.要画图肯定还需要esri:Draw这个控件了,上一篇有比较详细的讲了这里就不说了,代码如下:
2
3
1
<esri:Draw id="drawToolbar" map="{myMap}" graphicsLayer="{myGraphicsLayer}" drawEnd="drawEndHandler(event)" />
7.接着添加mx:ToggleButtonBar了,添加3个子按钮分别是点、线、面的操作,具体代码如下:
1
<mx:ToggleButtonBar verticalCenter="-195" itemClick="itemClickHandler(event)" x="11" toggleOnClick="true">
2
<mx:dataProvider>
3
<mx:Array>
4
<mx:Object icon="{point}" />
5
<mx:Object icon="{polyline}" />
6
<mx:Object icon="{polygon}" />
7
</mx:Array>
8
</mx:dataProvider>
9
</mx:ToggleButtonBar>
8.ToggleButtonBar的itemClickHandler事件代码:
2
3
4
5
6
7
8
9
1
private function itemClickHandler(event:ItemClickEvent):void
2
}
9.这样就实现了能在GraphicsLayer上画点、线、面的功能,接下来就是今天主要的代码就是在上面添加esri:Draw的时候给它添加了一个drawEnd="drawEndHandler(event)",这个就是当绘图完成后执行drawEndHandler(event)这个方法了,主要功能就是在这个方法里实现Identify的功能的,要实现Identify的功能还需要添加一个esri:IdentifyTask控件,这个就是实现Identify的功能的控件,添加控件代码如下:
2
1
<esri:IdentifyTask id="identifyTask" identifyComplete="identifyCompleteHandler(event)" url="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer"/>
mx:DataGrid的显示代码:
1
<mx:DataGrid id="datalist" height="311" borderStyle="solid" borderThickness="3" verticalCenter="-20" borderColor="#1B67D9" left="509">
drawEndHandler(event)的代码如下:
1
private function drawEndHandler(event:DrawEvent):void
2
}
10.这样就完成了所有的代码可以运行测试效果了。
2