扩展arcgis flex symbol 显示报表功能,显示饼状图和柱状图,非用infoSymbol实现(三)

这篇博客分享了一种扩展ArcGIS Flex Symbol的方法,以实现报表功能,包括饼状图和柱状图的显示。尽管Flex已不再常用,但博主提供了代码示例,供仍在使用Flex的读者参考。代码质量一般,但能帮助理解实现过程。目录包括柱状图、饼状图和调用示例。
摘要由CSDN通过智能技术生成

有博友问我这个什么怎么实现,我之前忘记贴代码了,虽然flex这个鬼东西离我们而去了,但是不乏还是有人用这个,就当怀念一下flex(早已拥抱了h5),我就翻箱倒柜找了半天程序,贴一个初级版本给大家参考,其实很简单。代码写的烂,烂番茄就不要扔了。目录结构是这样的:



第一个是柱状图,第二个是饼状图,第三个是调用

/*****************************************************
 * @创建者:liuyy
 * @创建时间:2014-1-11
 * @功能描述:扩展arcgis flex symbol自定义符号,主要是展示柱状图,生成图例
 * ***************************************************/
package platform.symbol
{
	import com.esri.ags.Map;
	import com.esri.ags.geometry.Geometry;
	import com.esri.ags.geometry.MapPoint;
	import com.esri.ags.symbols.Symbol;
	
	import flash.display.GradientType;
	import flash.display.Graphics;
	import flash.display.SpreadMethod;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.filters.DropShadowFilter;
	import flash.geom.Matrix;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFieldType;
	import flash.text.TextFormat;
	
	import mx.core.UIComponent;
	
	import core.util.ColorUtils;
	
	import platform.symbol.supportClasses.ColumnSeries;
	import platform.symbol.supportClasses.ColumnTip;
	
	public class ColumnSymbol extends Symbol
	{
		public function ColumnSymbol()
		{
			super();
			format.font = "LatoBlack";
			format.size = 13;
			format.align="center";
			format.bold=true;
		}
		
		private var shadow:DropShadowFilter = new DropShadowFilter(0,0,0xecf0f5,0.7,5,5);
		/**
		 * 每根柱子的宽度
		 */
		public var columnWidth:Number=18;
		/**
		 * 柱子底部的连接线是否可见
		 */
		public var lineSpriteVisible:Boolean = false;
		/**
		 * 柱子底部的连接线颜色
		 */
		public var lineSpriteColor:uint = 0x555555;
		/**
		 * 柱子颜色
		 */
		public var columnColor:uint = 0x3698ff;
		/**
		 * 柱子边框颜色
		 */
		public var borderColor:uint = ColorUtils.Silver;
		/**
		 * 柱子底部的连接线厚度
		 */
		public var lineSpriteThickness:int = 1;
		/**
		 * 提示框是否已经显示
		 */
		public var isTipShown:Boolean=false;
		/**
		 * 数字标注是否已经显示
		 */
		public var isLabelShown:Boolean=false;
		/**
		 * 数字标注颜色
		 */
		public var labelColor:uint=0x000000;
		/**
		 * 是否显示边框
		 */
		public var isBorderShown:Boolean=false;
		/**
		 * 是否是多根柱子
		 */
		public var isMulti:Boolean=false;
		/**
		 * 圆角
		 */
		public var ellipseNumber:Number=0;
		/**
		 * 图例
		 */
		private var legend:UIComponent = new UIComponent();
		/**
		 * 字体样式
		 */
		private var format:TextFormat = new TextFormat();
		/**
		 * 重写父类Symbol的draw方法
		 */
		override public function draw(sprite:Sprite, geometry:Geometry, attributes:Object, map:Map):void
		{		
			try{
				sprite.filters=[shadow];
				if (geometry.type==Geometry.MAPPOINT)
				{
					//坐标转换,地理坐标转屏幕坐标
					var sx:Number = toScreenX(map, (geometry as MapPoint ).x);
					var sy:Number = toScreenY(map, (geometry as MapPoint ).y);
				}
				var data:Array = attributes.data;
				var i:int=0;
				var total:Number=0;
				var halfLineSpriteWidth:Number = data.length*columnWidth/2;
				//trace("data:"+data.length);
				//绘制饼图的各个部分
				for each(var d:Object in data)
				{
					format.color = labelColor;
					total=total+Number(d.value);
					//trace("total:"+total);
					var val:Number = Number(d.value);
					var height:Number = Number(d.height);
					if(height<2)
					{
						break;
					}
					var startX:Number = sx-halfLineSpriteWidth+i*columnWidth;
					var startY:Number = sy-d.height;
					//绘制柱子begin
					var series:ColumnSeries=new ColumnSeries();
					series.sortNum = i;
					series.seriesNum = data.length;
					series.addEventListener(MouseEvent.MOUSE_OVER,seriesMouseOverHandler);
					series.addEventListener(MouseEvent.MOUSE_OUT,seriesMouseOutHandler);
					series.centerX = st
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值