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:指定标注离图元中心的距离。
下面我们就可以在刚建立好的图层上描绘自己的内容了。