【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()来实例化一个[url=http://www.i-mapx.com]MapX[/url]新的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:指定标注离图元中心的距离。
下面我们就可以在刚建立好的图层上描绘自己的内容了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值