目的:
1.ArcGIS API for Flex实现在MapTips中显示饼图进行数据统计展示,在本例子中可以点击城市的MapTip后显示详细人口年龄段的统计饼图的功能
准备工作:
1.在ArcGIS.Server.9.3发布一个叫California的Map Service,并且把这个Service启动起来,这次需要一些数据用来进行图表显示了,California的数据比较齐全了所以本例采用这个数据
2.底图的话采用Esri在线数据http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer
完成后的效果图:

ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)
开始:
1.启动Flex Builder3新建工程以及引入1.0正式版ArcGIS API for Flex library的开发包
2.新建chartInfowindow.mxml页面,添加Map、ArcGISTiledMapServiceLayer、ArcGISDynamicMapServiceLayer、GraphicsLayer等。具体代码如下:
 1ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)<esri:Extent id="myExtent" xmin="-124.162751982246" ymin="32.5782548652585" xmax="-114.589241057072" ymax="40.9473919319488" />
 2ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)    <mx:Canvas width="669" height="600" borderStyle="solid" borderThickness="3" verticalCenter="0" left="10">
 3ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)    <esri:Map id="myMap" extent="{myExtent}">
 4ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer" />
 5ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        <esri:ArcGISDynamicMapServiceLayer url="http://jh-53a435fbc0e8/ArcGIS/rest/services/California/MapServer">
 6ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            <esri:visibleLayers>
 7ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                <mx:ArrayCollection>
 8ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                <mx:Number>1</mx:Number>
 9ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                </mx:ArrayCollection>
10ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            </esri:visibleLayers>
11ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        </esri:ArcGISDynamicMapServiceLayer>
12ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        <esri:GraphicsLayer id="myGraphicsLayer"/>
13ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)    </esri:Map>
14ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)    </mx:Canvas>
3.上面的代码以ESRI_StreetMap_World_2D的ArcGISTiledMapServiceLayer为底图。在底图上只显示California的Cities的点图层,具体看ArcGISDynamicMapServiceLayer部分的设置。添加了一个GraphicsLayer用来显示MapTip了,同时设置了以California的范围为当前底图的Extent。
4.接下来需要用esri:InfoSymbol来实现mapTip,代码如下:
  1ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)<esri:InfoSymbol id="ifs">
  2ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        <esri:infoRenderer>
  3ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            <mx:Component>
  4ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                <mx:VBox width="100%" height="100%" backgroundColor="0xEEEEEE" click="clickHandler()" rollOver="rollOverHandler()" rollOut="rollOutHandler()"  >
  5ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Style>
  6ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        .InfoCloseButton
  7ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        {
  8ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            disabledSkin: Embed(source="assets/skins.swf",symbol="Callout_closeButtonDisabledSkin");
  9ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            downSkin: Embed(source="assets/skins.swf",symbol="Callout_closeButtonDownSkin");
 10ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            overSkin: Embed(source="assets/skins.swf",symbol="Callout_closeButtonOverSkin");
 11ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            upSkin: Embed(source="assets/skins.swf",symbol="Callout_closeButtonUpSkin");  
 12ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        }
 13ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        .InfoExpandButton
 14ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        {
 15ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            disabledSkin: Embed(source="assets/skins.swf",symbol="Callout_expandButtonDisabledSkin");
 16ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            downSkin: Embed(source="assets/skins.swf",symbol="Callout_expandButtonDownSkin");
 17ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            overSkin: Embed(source="assets/skins.swf",symbol="Callout_expandButtonOverSkin");
 18ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            upSkin: Embed(source="assets/skins.swf",symbol="Callout_expandButtonUpSkin");
 19ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        }
 20ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:Style>
 21ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Script>
 22ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        <![CDATA[
 23ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            import mx.collections.ArrayCollection;
 24ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                             private function clickHandler():void
 25ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                             {
 26ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                switch(currentState )
 27ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                {
 28ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                   case "" :
 29ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                      currentState = "TitleState";
 30ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                      break;
 31ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                   case "TitleState":
 32ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                      currentState = "DetailState";
 33ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                      break;
 34ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                   case "DetailState": 
 35ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                      currentState = "TitleState";
 36ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                      break;
 37ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                }
 38ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              }
 39ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              private function rollOverHandler() : void
 40ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              {
 41ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                 if(currentState == null || currentState == "" )
 42ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                 {
 43ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                    currentState = "TitleState";
 44ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                 }
 45ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              }
 46ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              private function rollOutHandler() : void
 47ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              {
 48ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                 if( currentState == "TitleState" )
 49ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                 {
 50ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                    currentState = "";
 51ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                 }
 52ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                              }
 53ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        ]]>
 54ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:Script>
 55ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:states>
 56ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        <mx:State name="TitleState">
 57ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <!-- relativeTo相对于其添加子项的对象、position子项的位置 -->
 58ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:AddChild relativeTo="{titleBar}" position="lastChild">
 59ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                <mx:Label id="titleLabel" fontWeight="bold" fontSize="15" text="{data.getItemAt(0).AREANAME}"/>
 60ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            </mx:AddChild>
 61ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:AddChild relativeTo="{titleBar}" position="lastChild">
 62ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                <mx:Button id="expandButton" styleName="InfoExpandButton" width="18" height="18" /> 
 63ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            </mx:AddChild>
 64ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        </mx:State>
 65ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        <!-- basedOn属性可以设置是基于哪个State -->
 66ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        <mx:State name="DetailState" basedOn="TitleState">
 67ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:RemoveChild target="{expandButton}" />
 68ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:AddChild relativeTo="{titleBar}" position="lastChild">
 69ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                <mx:Spacer width="100%" />
 70ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            </mx:AddChild>
 71ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:AddChild relativeTo="{titleBar}" position="lastChild">
 72ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                <mx:Button id="closeButton" styleName="InfoCloseButton" width="18" height="18" />
 73ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            </mx:AddChild>
 74ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:AddChild relativeTo="{this}">
 75ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                <mx:PieChart id="pieChart" dataProvider="{data}" width="250" height="200" showDataTips="true">
 76ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                    <mx:series>
 77ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                        <mx:PieSeries field="VALUE" nameField="AGE" labelPosition="callout">
 78ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            <mx:calloutStroke>
 79ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            <mx:Stroke weight="0" color="0x000000" alpha="100"/>
 80ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            </mx:calloutStroke>
 81ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            <mx:radialStroke>
 82ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            <mx:Stroke weight="0" color="#FFFFFF" alpha="20"/>
 83ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            </mx:radialStroke>
 84ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            <mx:stroke>
 85ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            <mx:Stroke color="0" alpha="20" weight="2"/>
 86ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                            </mx:stroke>
 87ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                        </mx:PieSeries>
 88ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                    </mx:series>
 89ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                </mx:PieChart>
 90ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            </mx:AddChild>
 91ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            <mx:AddChild>
 92ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                                <mx:Legend dataProvider="{pieChart}" direction="horizontal" horizontalGap="10" width="250" />
 93ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                            </mx:AddChild>
 94ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        </mx:State>
 95ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:states>
 96ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <!--状态切换时的动画效果 -->
 97ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:transitions>
 98ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Transition fromState="*" toState="TitleState">
 99ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Resize target="{this}" duration="100"/>
100ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:Transition>
101ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Transition fromState="TitleState" toState="DetailState">
102ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Resize target="{this}" duration="100"/>
103ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:Transition>
104ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Transition fromState="DetailState" toState="*">
105ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Resize target="{this}" duration="100"/>
106ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:Transition>
107ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Transition fromState="TitleState" toState="*">
108ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:Resize target="{this}" duration="100"/>
109ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:Transition>
110ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:transitions>
111ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    <mx:HBox id="titleBar" width="100%" height="100%" >
112ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                        <mx:Image source="@Embed(source='assets/pie_chart.gif')" width="18" height="18" />
113ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                    </mx:HBox>
114ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)                </mx:VBox>
115ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            </mx:Component>
116ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        </esri:infoRenderer>
117ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)    </esri:InfoSymbol>
5.上面的代码有点多了但是并不复杂了,整个代码就是定义一个id为ifs的esri:InfoSymbol,主要部分为TitleState和DetailState的2种视图状态的设置和鼠标移上去的rollOverHandler方法、鼠标移开的rollOutHandler方法、鼠标点击的clickHandler方法定义。
6.完成上面的工作后,接下来要做的就是在地图上显示MapTip了,这里就去部分的California的Cities的点图层数据了,在<mx:Application 添加mx:initialize用来实现初始化载入MapTip的显示,具体代码和说明如下:
 1ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)<mx:initialize>
 2ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)        <![CDATA[
 3ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            var queryTask : QueryTask = new QueryTask("http://jh-53a435fbc0e8/ArcGIS/rest/services/California/MapServer/1");
 4ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            var query : Query = new Query();
 5ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            //查询条件取OBJECTID大于600的;
 6ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            query.where="OBJECTID >600";
 7ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            //返回Geometry
 8ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            query.returnGeometry = true;
 9ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            //设置返回字段
10ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            query.outFields = ["AREANAME","AGE_UNDER5","AGE_5_17","AGE_18_21","AGE_22_29","AGE_30_39","AGE_40_49","AGE_50_64","AGE_65_UP"];
11ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            //进行查询
12ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            queryTask.execute(query, new AsyncResponder( onResult, onFault ));
13ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            //查询成功后执行方法
14ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)            function onResult( featureSet : FeatureSet, token : Object = null ) : void
15mx:initialize>
7.这样就完成的功能的开发,这个例子的代码相对简单了主要的是esri:InfoSymbol的定义以及mx:PieChart控件的使用。

相关文章: