{
import flash.display.DisplayObject;
import flash.filters.GlowFilter;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import mx.controls.Alert;
import org.openscales.core.feature.PointFeature;
import org.openscales.core.style.Style;
import org.openscales.core.style.marker.DisplayObjectMarker;
import org.openscales.core.style.symbolizer.PointSymbolizer;
import org.openscales.core.style.symbolizer.Symbolizer;
import org.openscales.core.style.symbolizer.TextSymbolizer;
import org.openscales.geometry.Collection;
import org.openscales.geometry.Point;
import org.openscales.geometry.basetypes.Location;
import org.openscales.geometry.basetypes.Pixel;
public class _my_feature_pointlabel extends PointFeature
{
public var _title:String='';
private var _textO:Object=new Object();
private var _textFiled:TextField;
public function _my_feature_pointlabel(geom:Point=null, data:Object=null, style:Style=null, isEditionFeature:Boolean=false, editionFeatureParentGeometry:Collection=null,title:String=null,_titleFormat:Object=null)
{
super(geom, data, style);
//super(geom, data, style,isEditionFeature,editionFeatureParentGeometry);
/*
if(title&&title!=""){
_title=title;
if(_titleFormat){
_textO=_titleFormat;
}
}
*/
//this.doubleClickEnabled=true;
}
public function setTitleText(text:String):void{
// TextField(getChildByName("point")).text=text;
_title=text;
}
override public function draw():void {
var numChildren:Number = this.numChildren;
for(var i:int=numChildren-1;i>=0;i--){
this.removeChildAt(i);
}
super.draw();
}
override protected function executeDrawing(symbolizer:Symbolizer):void
{
var x:Number;
var y:Number;
if(!this.layer || !this.layer.map)
return;
var resolution:Number = this.layer.map.resolution.value;
this.x = 0;
this.y = 0;
var px:Pixel = this.layer.getLayerPxForLastReloadedStateFromLocation(new Location(this.point.x, this.point.y, this.projection));
x = px.x;
y = px.y;
this.graphics.drawRect(x, y, 5, 5);
this.graphics.endFill();
if (symbolizer is PointSymbolizer)
{
var pointSymbolizer:PointSymbolizer = (symbolizer as PointSymbolizer);
if (pointSymbolizer.graphic)
{
var render:DisplayObject = pointSymbolizer.graphic.getDisplayObject(this);
render.x += x;
render.y += y;
this.addChild(render);
}
//Alert.show("xxx:" + this.name);
//if(_title){
_textFiled=new TextField();
_textFiled.text=this.name; //_title;
_textFiled.autoSize=TextFieldAutoSize.CENTER;
var render2:DisplayObject = pointSymbolizer.graphic.getDisplayObject(this);
_textFiled.x=x;//+render2.width;
_textFiled.y=y;//render2.y;
_textFiled.name="pointlabel_" + this.name;
/*
var myGlowFilter:flash.filters.GlowFilter;
if(_textO){
var _textFormat:TextFormat=new TextFormat();
_textFormat.color=_textO.color;
_textFiled.setTextFormat(_textFormat);
myGlowFilter = new flash.filters.GlowFilter(_textO.filterColor, 1, 2, 2, 10, 1, false, false);
}else{
myGlowFilter= new flash.filters.GlowFilter(0xffffff, 1, 2, 2, 10, 1, false, false);
}
var myFilters:Array =[];
myFilters.push(myGlowFilter);
_textFiled.filters= myFilters;
*/
this.addChild(_textFiled);
//}
}
else if (symbolizer is TextSymbolizer)
{
(symbolizer as TextSymbolizer).drawTextField(this);
}
}
/*
override protected function drawFlashGraphic(marker:DisplayObjectMarker, x:Number, y:Number):void
{
var instance:DisplayObject = marker;
instance.x += x;
instance.y += y;
if(_title){
_textFiled=new TextField();
_textFiled.text=_title;
_textFiled.autoSize=TextFieldAutoSize.CENTER;
_textFiled.x=instance.x+instance.width;
_textFiled.y=instance.y;
_textFiled.name="point";
if(_textO){
var _textFormat:TextFormat=new TextFormat();
_textFormat.color=_textO.color;
_textFiled.setTextFormat(_textFormat);
var myGlowFilter:flash.filters.GlowFilter = new flash.filters.GlowFilter(_textO.filterColor, 1, 2, 2, 10, 1, false, false);
}else{
var myGlowFilter:flash.filters.GlowFilter = new flash.filters.GlowFilter(0xffffff, 1, 2, 2, 10, 1, false, false);
}
var myFilters:Array =[];
myFilters.push(myGlowFilter);
_textFiled.filters= myFilters;
this.addChild(_textFiled);
}
this.addChild(instance);
}
*/
}
}
--调用:
var markers:VectorLayer = new VectorLayer("worklayer");
markers.projection= new ProjProjection("EPSG:4326");
markers.generateResolutions(19);
markers.style = Style.getDefaultPointStyle();
markers.style.name="DefaultPointStyle"; //!!否则导出kml属性报错
markers.alpha=0.6; //透明度
var markers_label:VectorLayer = new VectorLayer("worklayer_label");
markers_label.projection= new ProjProjection("EPSG:4326");
markers_label.generateResolutions(19);
markers_label.style = Style.getDefaultLabelStyle();
markers_label.style.name="DefaultPointStyle"; //!!否则导出kml属性报错
markers_label.alpha=1.0; //透明度
for(var i:int=0;i<rs.length;i++)
{
//try{
//生成feature对象并加入图层
//add the first marker
//Alert.show("aaa");
var lon:Number=rs[i].feature_lon;
var lat:Number=rs[i].feature_lat;
var loc:Location=new Location(lon,lat,_map.projection)
//添加自定义点
var pt:org.openscales.geometry.Point=new org.openscales.geometry.Point(lon,lat,_map.projection);
var marker:_my_feature_pointlabel=new _my_feature_pointlabel(pt);
marker.name=rs[i].feature_code;
marker.data.caption=rs[i].feature_caption; //记下marker的caption,矩形选择时列表显示用,不用查数据库
//marker.style=createPtStyle(fireClass); //Style.getDefaultPointStyle(); //
//marker.style.name="DefaultPointStyle"; //!!否则导出kml属性报错
markers.addFeature(marker);
/*
//添加普通点(并设置自定义样式)
var marker:PointFeature = PointFeature.createPointFeature(loc);
marker.name=rs[i].feature_code;
marker.data.caption=rs[i].feature_caption; //记下marker的caption,矩形选择时列表显示用,不用查数据库
marker.style=createPtStyle(fireClass); //Style.getDefaultPointStyle(); //
//marker.style.name="DefaultPointStyle"; //!!否则导出kml属性报错
markers.addFeature(marker);
*/
/*
//添加图形点
//由于map1.addelement与addfeature,createDisplayObjectMarker冲突,只能添加一个元素,暂停....
var s:spark.components.Image=new spark.components.Image();
s.source="assets/1_24x24.png";
FlexGlobals.topLevelApplication.ofm_main.map1.addElement(s);
//Alert.show("111");
//
var marker:CustomMarker = CustomMarker.createDisplayObjectMarker(s,new Location(lon,lat));
//marker.name=rs[i].feature_code;
//marker.data.caption=rs[i].feature_caption; //记下marker的caption,矩形选择时列表显示用,不用查数据库
//marker.style=Style.getDefaultPointStyle();
//marker.style.name="DefaultPointStyle"; //!!否则导出kml属性报错
markers.addFeature(marker);
//Alert.show("222");
*/
/*
//添加标注
var lblfeature:LabelFeature = LabelFeature.createLabelFeature(new Location(lon,lat-0.0001));
lblfeature.name="lbl_" + rs[i].feature_code;
lblfeature.text=rs[i].feature_caption;
lblfeature.style=Style.getDefaultLabelStyle();
lblfeature.style.name="DefaultLabelStyle"; //!!否则导出kml属性报错
//markers.addEventListener(FeatureEvent.FEATURE_OVER,dd);
markers_label.addFeature(lblfeature);
*/
//lblfeature.selectable=false; //不可选择
//break;
//FlexGlobals.topLevelApplication.ofm_main.map1.addElement(s);
//var ts:TextSymbolizer=new TextSymbolizer();//
//}catch(e:Error){Alert.show("eee" + e.message);}
}
//"http://127.0.0.1/dbserver/6_1.png"
//try
//{
//if(_map==null) Alert.show("map=null");
//var lo:Location=new Location(114.156915973307,35.716901271851,_map.projection);
//Alert.show("kkk");
//CustomMarker.createUrlBasedMarker("http://127.0.0.1/dbserver/123.bmp",lo);
//if(ss==null) Alert.show("ss=null");
//custmarker.name="cust1";
//custmarker.style=Style.getDefaultPointStyle();
//custmarker.style.name="styel custmarker";
//markers.addChild(custmarker);
//}catch(e:Error){Alert.show("加载custmarker出错:" + e.message);}
//var _map:Map=FlexGlobals.topLevelApplication.ofm_main.map1.map;
_map.addLayer(markers_label);
markers_label.selected=false;
_map.addLayer(markers); //!!后加的在上面
markers_label.redraw(true);
markers.redraw(true);
}
private function createPtStyle(myclass:Class):Style
{
var style:Style = new Style();
style.name = "Fire Style";
var stroke:Stroke, symbolizer:Symbolizer, rule:Rule;
//var bounds:Bounds;
rule = new Rule();
rule.name="Fire Style Rule";
symbolizer = new PointSymbolizer(new DisplayObjectMarker(myclass));
rule.symbolizers.push(symbolizer);
style.rules[0] = rule;
return style;
}