您的位置:首页 > Web前端 > CSS

MapXtreme图元选择并改变样式显示方法总结

2014-03-21 16:22 344 查看
最近接触项目的需要,研究了一个星期的MapXtreme。把图元选择并显示的方法总结并记录下来:

项目有一个图元图层(Sector),其中有一个“频点”字段。根据输入的频点字段值(比如68),当前值(68频点)的图元使用红色样式填充,当前值减1(67频点)使用蓝色,当前值加1(69频点)的使用黄色。总共使用了三种不同的方法如下:

(一)   创建三个不同的的图层显示

         MapXtreme安装包,有例子,不过效率感觉不太行

(二)   在当前图层创建主题显示

          1) 创建范围主题

              MapInfo.Mapping.Thematics.RangedTheme thm;

              //获取图层

              FeatureLayer lyr = _mapControl.Map.Layers["Sector"] as FeatureLayer;

              thm = new MapInfo.Mapping.Thematics.RangedTheme(

                           lyr,

                           "频点",

                           modifyAlias,

                           3,

                           MapInfo.Mapping.Thematics.DistributionMethod.CustomRanges);

                //颜色属性设置

               thm.SpreadBy = MapInfo.Mapping.Thematics.SpreadByPart.None;   //设置,取消主题默认渐变色

               thm.ApplyStylePart = MapInfo.Mapping.Thematics.StylePart.Color;   //必须设置,不然Sector所有图元置灰

               thm.ColorSpreadBy = MapInfo.Mapping.Thematics.ColorSpreadMethod.Rgb;

               提醒:this._mapControl.Map.DrawingAttributes.EnableTranslucency = true;加上这一句显示主题的时候Sector图元为透明

           2) 设置主题范围和样式

                   DrawLayer(67, Color.Blue, thm.Bins[0]);

                   DrawLayer(68, Color.Red, thm.Bins[1]);

                   DrawLayer(69, Color.Yellow, thm.Bins[2]);

                   private void DrawLayer(int value, Color color, MapInfo.Mapping.Thematics.ModifierThemeBin bin)

                   {

                          AreaStyle ars = new AreaStyle(new SimpleLineStyle(new LineWidth(1, LineWidthUnit.Pixel), 2, color, false), new  SimpleInterior(2, color, color, true));

                          bin.Min = value;

                          bin.Max = value;

                          bin.Value = value;

                          CompositeStyle cs = bin.Style;

                          cs.AreaStyle = ars;

                          bin.Style = cs;

                    }

                   lyr.Modifiers.Append(thm);

                   结果如图所示:(虽然结果符合,但是强加了主题概念,感觉不太合适)

(三)   创建三个选择集显示

        1).创建

        private void Init()

        {

            //新实例化

            InitSelection("蓝色", Color.Blue);

            InitSelection("红色", Color.Red);

            InitSelection("黄色", Color.Yellow);

        }

               private void InitSelection(string alias, Color color)

               {

                   Selection sel = MapInfo.Engine.Session.Current.Selections.CreateSelection(alias);

                   MapInfo.Styles.SimpleLineStyle lineStyle = new MapInfo.Styles.SimpleLineStyle(new MapInfo.Styles.LineWidth(1, MapInfo.Styles.LineWidthUnit.Point), 0, color, false);

                   MapInfo.Styles.AreaStyle areaStyle = new MapInfo.Styles.AreaStyle();

                   areaStyle.Border = lineStyle;

                   areaStyle.Interior = new MapInfo.Styles.SimpleInterior(2, color, color, true);

                   sel.Style.AreaStyle.ApplyStyle(areaStyle);

                   sel.Style.LineStyle.ApplyStyle(lineStyle);

              }

            2).检索

                filterSelection(MapInfo.Engine.Session.Current.Selections["蓝色"], "频点 = " + 67.ToString());

                filterSelection(MapInfo.Engine.Session.Current.Selections["红色"], "频点 = " + 68.ToString());

                filterSelection(MapInfo.Engine.Session.Current.Selections["黄色"], "频点= " + 69.ToString());

                private void filterSelection(Selection sel,string filter)

                {

                      MapInfo.Data.SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWhere(filter);

                      MapInfo.Data.IResultSetFeatureCollection ifs = MapInfo.Engine.Session.Current.Catalog.Search("Sector", si);

                      sel.Add(ifs);

               }

               完成上述两个步骤即可,但是线样式有点问题(线上有很多发光点),不知如何解决,如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MapXtreme 图源选择