AcrGS For JavaScript API Info Window With Chart(带饼图的提示框)————(二十二)

查看原文:AcrGIS for javascript api Info window with chart —— 带饼图的提示框

描述:

   在Info Window中显示饼图的示例

 

引用联接:http://help.arcgis.com/en/webapi/javascript/arcgis/jssamples/#sample/widget_infowindowchart

在线演示:http://help.arcgis.com/en/webapi/javascript/arcgis/samples/widget_infowindowchart/index.html

 

主要代码有:

(1)设置弹出框

var template=new esri.InfoTemplate();
template.setTitle("<b><img src='../images/flags/${STATE_ABBR}.png'/>  ${STATE_NAME}</b>");
template.setContent(<span style='background-color:yellow;'>getWindowContent</span>);

(2)设置选项卡和图标

var tc =new dijit.layout.TabContainer({
      style
:"height: 100%; width: 100%;"
}, dojo.create("div"));

var cp2 = new dijit.layout.ContentPane({
      title
:"Pie Chart"
});
    tc
.addChild(cp2);

var chart = new dojox.charting.Chart2D(cp2.domNode);
    chart
.addPlot("default",{type:"Pie"});
    chart
.addSeries("PopulationSplit",[{y:male,text:'Male'},{y:female,text:'Female'}]);

代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=7" />
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Info Window with Chart</title>
    <link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/dojo/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/esri/css/esri.css">
    <style>
      html, body {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
      }
      #map {
        padding:0;
      }
      .chart {
        width:200px;
        height:200px;
        padding:0px !important;
      }
    </style>
    <script>
		var dojoConfig = { 
			parseOnLoad: true 	// 解析器
		};
    </script>
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/"></script>
    <script>
		// 导入包
      dojo.require("dijit.layout.BorderContainer");
      dojo.require("dijit.layout.ContentPane");
      dojo.require("esri.map");
      dojo.require("esri.layers.FeatureLayer");
      dojo.require("dojox.charting.Chart2D");
      dojo.require("dojox.charting.plot2d.Pie");
      dojo.require("dojox.charting.action2d.Highlight");
      dojo.require("dojox.charting.action2d.MoveSlice");
      dojo.require("dojox.charting.action2d.Tooltip");
      dojo.require("dojo.number");
      dojo.require("dijit.layout.TabContainer");

      var map;
      // 其他主题 (Julie,CubanShirts, PrimaryColors, Charged, BlueDusk, Bahamation,Harmony,Shrooms)
      var theme = 'Wetland';
      dojo.require("dojox.charting.themes." + theme);


      function init() {
		  // 创建地图
        map = new esri.Map("map", {
          basemap: "streets",
          center: [-113.405, 43.521],
          zoom: 6
        });

        var template = new esri.InfoTemplate();
        // 标志图标是来自http://twitter.com/thefella,在Creative Commons发布
        template.setTitle("<b><img src='images/flags/${STATE_ABBR}.png'/>  ${STATE_NAME}</b>");
        template.setContent(getWindowContent);	// 内容使用函数来返回

        var statesLayer = new esri.layers.FeatureLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5", {
          mode: esri.layers.FeatureLayer.MODE_ONDEMAND,	// 选择模式
          infoTemplate: template,	// 弹出框
          outFields: ["*"]	// 指定的字段显示
        });
        var symbol = new esri.symbol.SimpleFillSymbol();
        statesLayer.setRenderer(new esri.renderer.SimpleRenderer(symbol));	// 渲染器只使用一个符号

        map.addLayer(statesLayer);
        map.infoWindow.resize(275, 275);	// 弹出框尺寸
      }

      function getWindowContent(graphic) {
        // 一个选项卡容器
        var tc = new dijit.layout.TabContainer({
          style: "width:100%;height:100%;"
        }, dojo.create("div"));

        // 显示属性信息
        var cp1 = new dijit.layout.ContentPane({
          title: "详细信息",
          content: "<a target='_blank' href='http://en.wikipedia.org/wiki/" + graphic.attributes.STATE_NAME + "'>维基百科条目</a><br /><br />Median Age: " + graphic.attributes.MED_AGE + "<br />Median Age (Male): " + graphic.attributes.MED_AGE_M + "<br />Median Age (Female): " + graphic.attributes.MED_AGE_F
        });

        // 男/女比例显示Dojo 饼图
        var cp2 = new dijit.layout.ContentPane({
          title: "饼图"
        });

        tc.addChild(cp1);
        tc.addChild(cp2);

        // 创建图表将显示在第二个选项卡
        var c = dojo.create("div", {
          id: "demoChart"
        }, dojo.create('div'));

        var chart = new dojox.charting.Chart2D(c);

        dojo.addClass(chart, 'chart');

        // 适用图表的颜色主题
        chart.setTheme(dojo.getObject("dojox.charting.themes." + theme));

        chart.addPlot("default", {
          type: "Pie",
          radius: 70,	// 半径
          htmlLabels: true	
        });
        dojo.connect(tc,'selectChild',function(tabItem){
          if(tabItem.title === "饼图"){
          chart.resize(180,180);	// 重设尺寸
          }
        });
        // 男女百分比%
        var total = graphic.attributes.POP2000;

        var male = dojo.number.round(graphic.attributes.MALES / total * 100, 2);
        var female = dojo.number.round(graphic.attributes.FEMALES / total * 100, 2);
        chart.addSeries("PopulationSplit", [{
          y: male,
          tooltip: male,
          text: 'Male(男)'
        }, {
          y: female,
          tooltip: female,
          text: 'Female(女)'
        }]);
        //当您将鼠标放在一个切片。突出的图表和显示工具提示,
        new dojox.charting.action2d.Highlight(chart, "default");
        new dojox.charting.action2d.Tooltip(chart, "default");
        new dojox.charting.action2d.MoveSlice(chart, "default");

        cp2.set('content', chart.node);
        return tc.domNode;
      }

      dojo.ready(init);
    </script>
  </head>
  
  <body class="claro">
    <div id="mainWindow" 
         data-dojo-type="dijit.layout.BorderContainer" 
         data-dojo-props="design:'headline', gutters:false" 
         style="width: 100%; height: 100%; margin: 0;">

      <div id="map" 
           data-dojo-type="dijit.layout.ContentPane" 
           data-dojo-props="region:'center'" 
           style="overflow:hidden;">
      </div>
    </div>
  </body>
</html>


效果如图:

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值