转载 画线

我建立的是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
private void 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下使用没有什么大的区别了。

代码我也是看了网上好多零散的东西凑出来的。 有什么不对或解释不恰当的地方多多包涵。
效果图:

 

你可能感兴趣的:(mapxtreme)