您的位置:首页 > Web前端

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

2013-05-08 09:41 393 查看
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;

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐