openscales 2.2 自定义feature类--带标注的点。以及其他实现方法

package
{
    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);

                }


        [Bindable] [Embed(source="assets/1_24x24.png")] public var fireClass:Class;
        
        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;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值