转载 画线

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

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

 

posted @ 2012-08-30 18:41  雪藩  阅读(169)  评论(0编辑  收藏  举报