一个项目的要求,道路上的标注要求顺着路的方向。为了满足这个要求,构建一个标注graphic,可用TextSymbol中的angle来设置文本的旋转,但是对于南北向的道路,要求文字竖排来显示,经过了不知道多长时间的纠结,最后我放弃了,好像没有这么一个属性能直接拿来用,于是我参考了一篇天地会的文章
http://bbs.9ria.com/forum.php?mod=viewthread&tid=40462,14楼的同志提供了一个思路和算法,于是我自己写了下面一个类扩展了TextSymbol
package AS
{
import com.esri.ags.symbols.TextSymbol;
import flash.text.TextFormat;
public class myTextSymbol extends TextSymbol
{
private var formerText:String;
public function myTextSymbol(Vertical:Boolean=false, text:String=null, htmlText:String=null, color:uint=0, alpha:Number=1, border:Boolean=false, borderColor:uint=0, background:Boolean=false, backgroundColor:uint=16777215, placement:String="middle", angle:Number=0, xoffset:Number=0, yoffset:Number=0, textFormat:TextFormat=null, textAttribute:String=null, textFunction:Function=null)
{
//TODO: implement function
super(text, htmlText, color, alpha, border, borderColor, background, backgroundColor, placement, angle, xoffset, yoffset, textFormat, textAttribute, textFunction);
if(Vertical)
{
formerText = text;
init();
}
}
private function init():void {
var tempText:String = "";
for (var i:int = 0; i < formerText.length; i++) {
tempText += formerText.charAt(i) + "\n";
}
this.text = tempText;
}
}
}
调用如下:
/**
*添加道路标签
* @param name 标签名称
* @param angle 旋转角度
* @param x X坐标
* @param y Y坐标
*
*/
private function add_road_label(name:String,angle:int,x:Number,y:Number,Vertical:Boolean):void
{
var mygeometry:Geometry=new MapPoint(x,y);
var textSymbol:myTextSymbol=new myTextSymbol(Vertical,name,null,0x000000,1,false,0xffffff,false,0xFF9900,"middle",angle,0,0,new TextFormat("微软雅黑",12));
//构建标签
var grahic2:Graphic=new Graphic(mygeometry,textSymbol);
//添加标签
myGraphicsLayer.add(grahic2);
}
/**
*添加所有道路标签
*
*/
private function add_all_road_lable():void
{
add_road_label("长 江 西 路",-30,215174,89640,false);
add_road_label("江 山 南 路",-35,214831,88891,true);
add_road_label("滨 海 大 道",-36,215799,88878,false);
add_road_label("太 行 山 路",-36,216129,89724,true);
}