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);
}
完成上述两个步骤即可,但是线样式有点问题(线上有很多发光点),不知如何解决,如下:
项目有一个图元图层(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);
}
完成上述两个步骤即可,但是线样式有点问题(线上有很多发光点),不知如何解决,如下:
相关文章推荐
- 用CSS来改变网页鼠标显示样式的方法
- win8,win8.1应用中生成显示button和button背景图片的三,四种方法以及改变元素样式的四种方法
- discuz二级导航选择横排样式不显示的解决方法
- js实现下拉框选择要显示图片的方法
- Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
- Ext3.0选择时间只显示年月选项的方法
- easyui datagrid combobox 选择后显示valueField 而不是 textValue解决方法
- Jquery使用css方法改变样式实例
- 测试match()方法、改变样式、换行符
- 关于Android平台显示隐藏软键盘输入法的方法总结
- 使用validate进行表单验证时土方法(appendTo)改变error显示的位置
- 改变HTML中超链接的显示样式
- 使用dwr实现下拉框级联和js实现动态选择option的selected状态方法总结
- jquery 显示隐藏div方法show(),hide(),toggle(),slideDown()总结
- 设置TabWidget的样式的方法、关联Fragment与tabwidget的方法、点击tab显示相应Fragment方法
- JQuery 选择和过滤方法代码总结
- javascript动态改变img的src属性图片不显示的解决方法
- PNG图片的透明通道在IE中显示的方法总结
- JQuery入门总结(三)【选择器、方法、Json】
- JavaScript中获取样式值的方法总结