打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)

ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)

目的:
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
完成后的效果图:


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

37
            }

38
            
//查询失败后执行方法
39
            function onFault( info : Object, token : Object = null ) : void
40
            
{
41
                Alert.show(info.toString());
42
            }

43
        ]]
>
44
    
</mx:initialize>
7.这样就完成的功能的开发,这个例子的代码相对简单了主要的是esri:InfoSymbol的定义以及mx:PieChart控件的使用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ESRI的ArcGis视频分享
ArcGIS JS 3.x使用webgl绘制热力图
C#教程之c#调用arcgis地图rest服务示例详解(arcgis地<div><p style="color: rgb(0, 0, 0); font-size: 14px; font-weight: 400;">1)构建请求网址</p><p style="color: rgb(0,
ArcGIS 10 60 天试用版
arcengine,c# 二次开发
Sketchup与Sketchup ESRI plugin
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服