本文以画利用arcgis for flex在地图某个点上绘制anychart为例子
一:创建一个图层,并根据经纬度生成一个MapPoint对象
var graphicsLayer:GraphicsLayer = getGraphicLayer(layerName);
var point:MapPoint = new MapPoint();
point.x = lon;
point.y = lat;
二:创建一个Graphic对象,并设置它的地理信息(生成的MapPoint对象)
//画点
var gra:Graphic = new Graphic();
gra.id = id;
gra.geometry = point;//设置画的几何对象是点
三:设置graphic的样式,可以自定义一个AnyChartSymbol这样的一个样式
继承com.esri.ags.symbols.MarkerSymbol,并重写
override public function draw(sprite:Sprite, geometry:Geometry,
attributes:Object, map:Map) 这个方法
源码如下:
package widgets.Thematic { import com.anychart.AnyChartFlex; import com.anychart.events.AnyChartPointEvent; import com.esri.ags.Map; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.MapPoint; import com.esri.ags.symbols.MarkerSymbol; import com.geok.util.$; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.GradientType; import flash.display.Sprite; import flash.events.Event; import flash.filters.DropShadowFilter; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.sampler.NewObjectSample; import mx.rpc.events.ResultEvent; import spark.components.Label; import uk.co.teethgrinder.Chart; public class AnyChartSymbol extends com.esri.ags.symbols.MarkerSymbol { private var _ChartWidth:int = 20; //行 private var _ChartHeight:int = 40; //列 private var anySprite:AnyChartFlex; private var _ChartObj:Object; private var _ChartUrl:String; public var clickCallbackFunction:Function; public var selectCallbackFunction:Function; public function get ChartUrl():String { return _ChartUrl; } public function set ChartUrl(value:String):void { _ChartUrl = value; } public function AnyChartSymbol(){ super(); } /** * 宽度 */ public function get ChartWidth():int { return this._ChartWidth } public function set ChartWidth(value:int):void{ _ChartWidth = value; } /** * 高度 */ public function get ChartHeight():int { return this._ChartHeight } public function set ChartHeight(value:int):void{ _ChartHeight = value; } /** * 数据源 */ public function get ChartObj():Object { return this._ChartObj; } public function set ChartObj(value:Object):void{ _ChartObj = value; } override public function draw(sprite:Sprite, geometry:Geometry, attributes:Object, map:Map):void { var _self:AnyChartSymbol = this; const mapPoint:MapPoint = MapPoint(geometry); sprite.graphics.clear(); sprite.x = toScreenX(map,mapPoint.x)-ChartWidth/2; sprite.y = toScreenY(map,mapPoint.y)-ChartHeight/2; if(anySprite==null) { anySprite = new AnyChartFlex(); anySprite.width =ChartWidth; anySprite.height=ChartHeight; anySprite.addEventListener(AnyChartPointEvent.CLICK,function(event:AnyChartPointEvent):void{ _self.clickCallbackFunction.call(_self,event); }); anySprite.addEventListener(AnyChartPointEvent.SELECT,function(event:AnyChartPointEvent):void{ _self.selectCallbackFunction.call(_self,event); }); sprite.addChild(anySprite); // anySprite.chartData = ChartObj; $.XMLPost(ChartUrl,loadChart); function loadChart(event:ResultEvent):void{ var xml:XML = new XML(event.result.toString()); anySprite.anychartXML = xml; } }; } } }
四:设置anychartsymbol的样式以及回调方法
var sy:AnyChartSymbol = new AnyChartSymbol(); var url:String = chartUrl; sy.ChartHeight = chartHeight; sy.ChartWidth = chartWidth; sy.ChartUrl = chartUrl; sy.clickCallbackFunction = function(event:AnyChartPointEvent):void{ var name:String = event.pointName; var yvalue:Number = event.y; var xvalue:Number = event.x; var value:Number = event.value; var obj:Object = new Object(); obj.name = event.pointName; obj.xvalue = xvalue; obj.yvalue = yvalue; obj.vaue = value; ExternalInterface.call(mouseClick as String,obj); }
五:设置graphic的样式,并添加到图层当中
gra.symbol = sy;
graphicsLayer.add(gra);