重写FeatureStyleModifier实现更新一个图层中指定的几个图元的样式

原创 2007年09月18日 09:10:00

重写FeatureStyleModifier


using System;
using MapInfo.Styles;

namespace GIS.MapInfoModify
{
/// <summary>
/// SelectedPointModifier 的摘要说明。
/// 重写FeatureStyleModifier,可以通过SelectedPointModifier,来修改单个的或是多个选中的点图元
/// </summary>
internal class SelectedPointModifier:MapInfo.Mapping. {
private BasePointStyle _pointStyle;
private System.Collections.Hashtable features;
/// <summary>
/// 重写FeatureStyleModifier,实现对图层中单个或是多个图元的样式的修改
/// </summary>
/// <param name="name">样式的名称</param>
/// <param name="alias">样式别名</param>
/// <param name="dSelection">要修改样式的集合</param>
/// <param name="layerAlias">图层别名</param>
// /// <param name="PointStyle">想使选中的点显示的样式</param>
public SelectedPointModifier(string name, string alias, MapInfo.Engine.Selection dSelection, string layerAlias): base(name, alias)
{
// this._pointStyle=PointStyle;
features = new System.Collections.Hashtable();
string[] exp = new string[]{"MI_Key"};
this.Expressions = exp;
foreach(MapInfo.Data.IResultSetFeatureCollection irfc in dSelection)
{
// Only save the selected features from the layer to apply the modifier too.
// The DefaultSelection could have features from several layers.

if(irfc.BaseTable.Alias == layerAlias)
{
foreach(MapInfo.Data.Feature f in irfc)
{
features.Add(f.Key.Value, f.Key.Value);
}
}
}
}
protected override bool Modify(MapInfo.Styles.FeatureStyleStack styles, object[] values)
{
MapInfo.Styles.CompositeStyle cs = styles.Current;
if (features.Contains((values[0] as MapInfo.Data.Key).Value))
{
// Set the style for region features because the modifier is being applied to a region layer.
// BitmapPointStyle vs=new BitmapPointStyle("PINB-64.BMP");
// (vs.PointSize=20;
//cs = new CompositeStyle(null, null, null, vs);
// cs.SymbolStyle=this._pointStyle;
cs.SymbolStyle.PointSize=20;
//(cs.AreaStyle.Interior as MapInfo.Styles.SimpleInterior).ForeColor = System.Drawing.Color.Orange;
//(cs.AreaStyle.Border as MapInfo.Styles.SimpleLineStyle).Color = System.Drawing.Color.RoyalBlue;
//(cs.AreaStyle.Border as MapInfo.Styles.SimpleLineStyle).Width = new MapInfo.Styles.LineWidth(3, MapInfo.Styles.LineWidthUnit.Pixel);

return true;
}
return false;
}
}
}
下面是调用

#region 高亮显示选中的图元通过改变其样式
private void ShowShi(string LayerName)
{
MapInfo.Mapping.FeatureLayer fl = this.mapControl1.Map.Layers[LayerName] as MapInfo.Mapping.FeatureLayer;
//The FeatureLayer can be any Region layer desired to change
//其中只是改变选中的图元的大小来表示闪烁
if(fl!=null)
{
string ModifierName=LayerName+"Modifier";
SelectedPointModifier scm = new SelectedPointModifier(ModifierName, ModifierName, MapInfo.Engine.Session.Current.Selections.DefaultSelection, fl.Alias);
int ModifiCount=fl.Modifiers.Count;
if(ModifiCount!=0)
{
fl.Modifiers.Remove(ModifierName);
this.ShanCi++;
}
else
{
fl.Modifiers.Append(scm);
this.ShanCi++;
}
if(this.ShanCi%6==0)//闪几次就不再闪
{
this.timerSelect.Enabled=false;
this._shanShuoLayerName=null;
this.ShanCi=0;
}

}
}
 

————————————————————————————————————————————————

左懿代码一

foreach(Feature ftr in fc)
{
MapInfo.Data.MIConnection connection = new MapInfo.Data.MIConnection();
connection.Open();

MapInfo.Data.MICommand command = connection.CreateCommand();
command.CommandText = "update " + ftr.Table.Alias + " set obj = @obj,MI_Style=@style where MI_Key = @MIKEY";
command.Parameters.Add("@obj", ftr.Geometry );
command.Parameters.Add("@MIKEY", ftr.Key);
command.Parameters.Add("@style",cs);
command.ExecuteNonQuery();

command.Dispose();
connection.Close();
connection.Dispose();

ftr.Update();
}

——————————————————————————————————————————————

左懿代码二

string tempLayerName = "tempStreet";
MapInfo.Data.Table newTable = CreateTempLayer(tempLayerName);

//MapInfo.Data.Table newTable = MapInfo.Engine.Session.Current.Catalog.OpenTable(tempLayerName);

MapInfo.Data.MIConnection connection = new MapInfo.Data.MIConnection();
connection.Open();

MapInfo.Data.MICommand command = connection.CreateCommand();

command.CommandText = "delete "+tempLayerName ;
command.Prepare();
command.ExecuteNonQuery();

command.CommandText = "Insert into "+tempLayerName + " Select * from street where MI_Key = @MIKEY";
command.Parameters.Add("@MIKEY", ftr.Key);
command.Prepare();
command.ExecuteNonQuery();

command.Dispose();
connection.Close();

(mapControl.Map.Layers[tempLayerName] as FeatureLayer).Modifiers.Clear();
MapInfo.Mapping.FeatureOverrideStyleModifier fsmtemp = new MapInfo.Mapping.FeatureOverrideStyleModifier(null,cs);
(mapControl.Map.Layers[tempLayerName] as FeatureLayer).Modifiers.Append(fsmtemp);

——————————————————————————————————————————————

C/S下替换图片

Feature feature=this.FindFeature(this.tableName,"siteId","4");

((BitmapPointStyle)feature.Style).Name="TRUC-64";
feature.Update();

相关文章推荐

ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoSer...

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

最近接触项目的需要,研究了一个星期的MapXtreme。把图元选择并显示的方法总结并记录下来: 项目有一个图元图层(Sector),其中有一个“频点”字段。根据输入的频点字段值(比如68),当前值...

怎样实现一个图层的运动(可实现贪吃蛇小游戏,代码现不完善,请关注本人,今日完善)

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> http://www.w3.org/1999/xhtml">     new...

地图指定经纬度图元显示功能

  • 2012年04月29日 21:09
  • 2.58MB
  • 下载

利用ArcGIS Server动态图层改变地图服务的图层样式

ArcGIS Server10.1及以后的版本新增了动态服务的新特性,利用动态服务,用户可以通过api轻松的在本地对地图服务进行修改,如图层样式,向地图服务添加本地数据。最近刚好一个项目,需要用户可以...

QGis二次开发基础 -- 矢量图层的显示样式

带坐标的矢量图层作为GIS的核心数据,具有非常丰富的用途。人们往往喜欢在地图上做各种标记,不仅美观,而且使地图清晰,一目了然。于是应运而生了使用各种各样的图标作为地图标记的功能需求,在很多GIS软件上...
  • deirjie
  • deirjie
  • 2016年01月05日 21:32
  • 4844

Photoshop----图层的样式

1. 2.立体黄金字的制作 注:如果希望新建的文件大小与原来的某个窗口大小一致,则可点击窗口--选择你要的那个窗口大小的名称。 步骤:设置图层的背景色,输入字体,设置颜色。点击图层的添加...

openlayer通过SLD改变图层Feature的样式

GeoServer能够提供WMS服务,采用SLD来渲染地图样式。如何动态地改变地图的样式,来完成一些特殊的功能呢?可以参照demo中的wms-sld_body示例,做法如下:(下列代码是在OpenLa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重写FeatureStyleModifier实现更新一个图层中指定的几个图元的样式
举报原因:
原因补充:

(最多只允许输入30个字)