【MapX教程之二】创建一个用户自定义图层

1 程序功能

在地图上建立一个用户自定义的图层,该图层上的每个图元包括图元编号、图元名称、图元描述、图元坐标等属性,并且生成一个数据集与该图层绑定。

2 程序实现

public bool NewUserLayer(string layerName)
//新建自定义图层,若存在则添加到图层集中
  {
   MapXLib.Layer layer;
   MapXLib.Fields flds=new MapXLib.FieldsClass();
   flds.AddStringField("source",50,false);
   flds.AddStringField("name",50,false);
   flds.AddStringField("identity",50,false);
   flds.AddStringField("description",50,false);
   flds.AddStringField("foundTime",50,false);
   flds.AddFloatField("objX",false);
   flds.AddFloatField("objY",false);
   MapXLib.LayerInfo layerInfo;
   layerInfo=new MapXLib.LayerInfoClass();   layerInfo.AddParameter("FileSpec",@appDirectory+"\\"+layerName+".tab");
   layerInfo.AddParameter("Name",layerName);
   layerInfo.AddParameter("Fields",flds);
   layerInfo.AddParameter("AutoCreateDataset",1);
   layerInfo.AddParameter("DatasetName","ds"+layerName);
   if (!File.Exists(@appDirectory+"\\"+layerName+".tab"))
   {
layerInfo.Type=MapXLib.LayerInfoTypeConstants.miLayerInfoTypeNewTable;
   }
   else
   {
   layerInfo.Type=MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab;
   }
   try
   {
    layer = axMap1.Layers.Add(layerInfo,1);
    axMap1.Refresh();
    return true;
   }
   catch
   {
    return false;
   }
  }

3 程序说明

(1)flds是MapXLib.Fields对象,即图层的属性字段集,将来会出现在.tab文件中。用new MapXLib.FieldsClass()来实例化一个 MapX新的Fields对象。在对任何对象进行引用前,必须先实例化该对象。
AddStringField, AddFloatField是Fields字段集对象的两个方法,分别用来定义字符串字段及浮点型字段,并添加到Fields字段集对象中。有关AddStringField(),AddFloatField()的语法请参考MapX文档。
(2)MapXLib.LayerInfo对象是用来增加新层的一个非常好的方法,在layerInfo中具体定义该层的一些参数。
 layerInfo.AddParameter("FileSpec",@appDirectory+"\\userDrawLayer.tab"):指定该层的存放路径。@为转义字符, appDirectory为应用程序目录变量,可用Directory.GetCurrentDirectory()来得到。 userDrawLayer.tab为该层的.tab文件名。
 layerInfo.AddParameter("Name","userDrawLayer"):指定该层的名字”userDrawLayer”,名字将会出现在图层控制对话框中。
 layerInfo.AddParameter("Fields",flds):指定该图层的属性字段集对象,即上面新定义的MapXLib.Fields对象。
 layerInfo.AddParameter("AutoCreateDataset",1):指定是否自动产生数据集,1自动产生,0不产生。有关数据集的概念,在后续部分再重点作介绍。
 layerInfo.AddParameter("DatasetName","dsUserLayer");指定数据集的名字“dsUserLayer”。
 layerInfo.Type属性:指定新层的类型。MapXLib.LayerInfoTypeConstants.miLayerInfoTypeNewTable:指定产生一新层。 MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab:指定一存在的图层。
 axMap2.Layers.Add(layerInfo,1)语句:增加layerInfo所定义的新层,其中“1”代表增加至图层最上面。
这样就得到一个名为userdrawlayer的图层,并且得到一个名为dsUserLayer的数据集与该图层自动绑定。利用这种方法建立数据集非常方便,也非常好用。在一般情况下都可满足系统的需求。该数据集可理解为一张表格,该表格的结构即为上面定义的flds字段集对象,该表格中的每一个记录对应图层上每一个图元的属性记录。

编号 名称 描述 经度 纬度
01 北京市 中华人民共和国国首都 .. ..
… … … … …
(3)LabelProperties用来说明如何用数据集中的数据标注图层上每一个图元。
layer.LabelProperties.Dataset:指定数据集对象。
layer.LabelProperties.DataField:指定用数据集中哪个字段值标注图元。
layer.LabelProperties.Position:指定标注位置。
layer.LabelProperties.Style.TextFont.Size:指定标注的字体及大小等。
layer.LabelProperties.Offset:指定标注离图元中心的距离。
下面我们就可以在刚建立好的图层上描绘自己的内容了。

你可能感兴趣的:(数据结构)