转载 画线
我建立的是MapXTreme Windows Application:
建立以后,将当前的地图设定为了墨西哥地图:mexico.GST
然后,在窗体上添加了一个C#(不是MapXTreme中的),然后添加了按钮事件。
效果是,点击这个按钮一个后,会在当前地图上绘制上一条直线。直线宽度为3,红色(改线宽、颜色以便突出显示)。
主要代码如下:(三部分)
1.Form1.Designer.cs里面,声明了两个公有变量,目的是在程序中更加灵活的创建表或者图元等
- C# code
-
partialclass Form1 { private MapInfo.Windows.Controls.MapControl MCtrl; //这个是添加的MapXCtrol控件
private System.Windows.Forms.Button button1; //这个是添加的按钮
public FeatureLayer TmFlyr; //下面两个是我手动添加的Form1的公有成员变量
public MapInfo.Data.Table TmTbl; }2.Form加载的时候公有变量创建(创建和与地图控件建立联系)- C# code
-
privatevoid Form1_Load(object sender, EventArgs e) { MapInfo.Data.Catalog Cat = MapInfo.Engine.Session.Current.Catalog; //TmTbl = Cat.GetTable("mexico"); //如果是打开现有表进行操作可以直接通过表名字得到某个表 TableInfoMemTable TmInfo =new TableInfoMemTable("Tm"); TmTbl = Cat.GetTable("Tm"); //这里是打开名字为“Tm”的Table,这句在其实没有用处,但是当你打开的是已经加载 //GST文件的地图时,需要首先判断一下会不会重名if ( TmTbl !=null ) { Cat.CloseTable("Tm"); } //如果表不为空,标明没有重名 //要创建一个Table,需要首先创建Tables信息,下面就是创建Tables信息:( 就好像在数据库里面创建字段一样 ) //这些字段标明了你表中的各个元素的属性,方便在程序中通过特定值查找等操作 //构造GeometryColumn字段
TmInfo.Columns.Add( ColumnFactory.CreateFeatureGeometryColumn( MCtrl.Map.GetDisplayCoordSys( ) ) ); //构造Style类型Column字段
TmInfo.Columns.Add( ColumnFactory.CreateStyleColumn( ) ); //构造String类型Column字段
TmInfo.Columns.Add( ColumnFactory.CreateStringColumn( "Name", 12 ) ); TmInfo.Columns.Add( ColumnFactory.CreateStringColumn( "Loca", 50 ) ); //构造Int类型Column字段
TmInfo.Columns.Add( ColumnFactory.CreateIntColumn( "Indx" ) ); TmTbl = Cat.CreateTable( TmInfo ); //创建临时表 TmFlyr =new FeatureLayer( TmTbl ); //创建临时图层 MCtrl.Map.Layers.Add( TmFlyr ); //将临时图层加入当前的MapXTreme图层当中}3.按钮触发事件(创建图元、规定样式、加入地图)- C# code
-
privatevoid button1_Click(object sender, EventArgs e){ DPoint Vpt; //定义一个点Vpt.x =-101.236401711274; //赋值(经纬度)Vpt.y =22.6474803334433; //下面应该是将坐标点根据当前地图的坐标系进行了一次转换FeatureGeometry SVpt =new MapInfo.Geometry.Point( TmFlyr.CoordSys, new DPoint( Vpt.x, Vpt.y ) ) as FeatureGeometry; CompositeStyle Vcs =new CompositeStyle( new SimpleVectorPointStyle( 37, Color.Red, 10 ) ); //创建点样式Feature Vftr =new Feature(TmTbl.TableInfo.Columns); //创建图元Vftr.Geometry = SVpt; //设置图元属性Vftr.Style = Vcs; Vftr["Name"] ="KHT"; Vftr["Loca"] ="Tianjin"; Vftr["Indx"] =1;TmTbl.InsertFeature( Vftr ); //将图元加入表中MapInfo.Geometry.DPoint[] Lpt =new DPoint[2]; //创建一个点数组{多个点可以多建立}Lpt[0].x =-101.236401711274;Lpt[0].y =22.6474803334433;Lpt[1].x =-102.116736770488;Lpt[1].y =32.2141510582492;FeatureGeometry MLpt =new MultiPolygon ( TmFlyr.CoordSys, CurveSegmentType.Linear,Lpt );//创佳一个多边形SimpleLineStyle bStyle =new SimpleLineStyle( new LineWidth( 3, LineWidthUnit.Pixel ), 2, Color.Red) ; //创建一个边框样式SimpleInterior iStyle =new SimpleInterior ( 2, Color.Blue, Color.Blue,false); //创建一个内部样式CompositeStyle Lcs =new CompositeStyle ( new AreaStyle( bStyle, iStyle), null, null, null); //创建线样式Feature Lftr =new Feature( MLpt, Lcs ); //创建多边形图元 TmTbl.InsertFeature( Lftr); //将图元加入表中}
不知道这样的代码对你有没有用,感觉上c#下使用MapXTreme最主要应该是要熟悉一些变量的创建规则、熟悉MapXTreme本身的一些命名空间、那些空间中能找到我们需要的类型。除此之外,其实跟MapX在VC下使用没有什么大的区别了。
代码我也是看了网上好多零散的东西凑出来的。 有什么不对或解释不恰当的地方多多包涵。
效果图: