有博友问我这个什么怎么实现,我之前忘记贴代码了,虽然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