初步认识
地图由图层、要素、样式等组成。地图上有N个图层,图层上有N个要素,每个要素可以存放点、线、面等,每个要素可以设置样式,如果显示图片、或文字均可以先创建一个mxml组件,然后设置到要素上。
面和线都是由点组成的。
添加点
1.首先初始化图层,GraphicsLayer。
2.获取坐标点,MapPoint。
3.创建要素,Graphic。
4.设置样式 Symbol。
5.添加要素至Layer,即是第一步创建的图层。
添加线
在添加点的基础上多了一个步骤。
获取到多个点,可以实例化一个线对象,将线添加到点中。
//构造线对象 var pline:Polyline=new Polyline(); //添加点数据到线 pline.addPath(xydata);
其他步骤相同,xydata是一个MapPoint数组。
添加面
跟添加线的逻辑一样,面也是由n个点组成。核心代码如下:
var area:Polygon=new Polygon(); area.addRing(xydataArea);
图层
图层按照先后添加顺序,好比html的zindex属性。最先添加的属性在下方。如果说,同时添加一个面和线,而线要做点击事件,那么线所处的图层应该在面之上。
高亮闪烁
创建一个symbolToggleEffect对象,设置其样式,在MouseOver事件中,开始动画,MouseOut事件中结束动画。
private static var symbolToggleEffect:SimpleFiltersToggleEffect; //高亮对象 private static var filterMarker:GlowFilter=null; //高亮样式 private static var simfilterArray:Array=[]; //过滤对象数组 public static function DrawVehAreaOver(evt:MouseEvent):void { if (symbolToggleEffect) symbolToggleEffect.end(); var targetGarphic:Graphic=evt.currentTarget as Graphic; //获取图层 var layer:GraphicsLayer=GetAreaLayer(); //找到缓冲区图层,存在则隐藏 var currArea:Graphic=FindGraphicByAttr(layer, "AREAID", targetGarphic.attributes.USERID); if (currArea) { currArea.visible=true; //开始高亮 if (!symbolToggleEffect) { if (!filterMarker) { InitSyle(); } symbolToggleEffect=new SimpleFiltersToggleEffect(currArea, null, simfilterArray, 500); } symbolToggleEffect.play(); } } //昂是初始化 private static function InitSyle():void { //高亮样式 if (!filterMarker) { var objselectedHouse:Object=RGlobal.MapUrlArrayList["FeatureStyles"].SelectHouse; filterMarker=new GlowFilter(); filterMarker.color=objselectedHouse.fillcolor; filterMarker.blurX=20; filterMarker.blurY=20; filterMarker.alpha=objselectedHouse.fillopacity; filterMarker.strength=2; simfilterArray.push(filterMarker); } } /*线路要素 移出 */ public static function DrawVehAreaOut(evt:MouseEvent):void { if (symbolToggleEffect) symbolToggleEffect.end(); var targetGarphic:Graphic=evt.currentTarget as Graphic; //获取图层 var layer:GraphicsLayer=GetAreaLayer(); //找到缓冲区图层,存在则隐藏 var currArea:Graphic=FindGraphicByAttr(layer, "AREAID", targetGarphic.attributes.USERID); if (currArea) { currArea.visible=false; } }