第二种实现方法:使用FeatureFactory创建图元
MapXLib.Feature ftr=new MapXLib.FeatureClass();
MapXLib.Point p=new MapXLib.PointClass();
p.Set(axMap1.CenterX,axMap1.CenterY);
ftr=axMap1.Layers._Item("US Top 20 Cities")
.AddFeature(axMap1.FeatureFactory.CreateText
(p,"New Feature",MapXLib.PositionConstants.miPositionCC,
new MapXLib.StyleClass()),
new MapXLib.RowValuesClass());
这段代码和上面和第一种实现方法类似,我们在这里不再设置图元的Type和Style.
FeatureFactory类似于设计模式中的Factory模式,从它可以产生各种类型的图元,这个过程相当于设置了图元的Type.
10)查找图元:
查找图元是很简单的,可以用下边的代码实现:
MapXLib.FindFeature fRes=null;
fRes=axMap1.Layers._Item("US Top 20 Cities").Find.Search("New York","");
axMap1.CenterX=fRes.CenterX;
axMap1.CenterY=fRes.CenterY;
上面这段代码将找到的图元放置在地图中央.这里要注意的是不能使用
MapXLib.FindFeature fRes=new MapXLib.FindFeatureClass();
来创建FindFeature对象,否则将会出错:
"带有 CLSID {436052C3-43E3-11D0-83EB-00AA00BD34FC}的COM对象无效或未注册。"这是MapX 5.0的一个Bug.要避开它,只要在创建对象的时候赋null值就可以了.
下面我们对程序作一些改进,来避免找不到图元的时候出错,并在找到图元以后选择该图元:
MapXLib.FindFeature fRes=null;
fRes=axMap1.Layers._Item("US Top 20 Cities").Find.Search("New York","");
if (fRes.FindRC % 10 ==1)
{
axMap1.CenterX=fRes.CenterX;
axMap1.CenterY=fRes.CenterY;
axMap1.Layers._Item("US Top 20 Cities").Selection.Add(fRes);
}
11)图元的修改:
图元的增加,修改和删除都是非事务性的,也就是说,所作的修改都永久性地对图层表数据产生影响.这可以使用户对多个图元进行操作后一次更新地图,但是在更新之前并不能看到更新后的效果.我们在使用第一种方法创建图元的时候,在最后更新:
ftr.Update(ftr,new MapXLib.RowValuesClass());
但是在FeatureFacory创建图元的时候是不用Update的,因为FeatureFactory的相关方法中已经包含了Update.根据MapX 5.0的开发手册介绍,修改了某个图元并更新时应使用Feature.Update方法,当使用其它图元取代某个图元,应使用Layers.UpdateFeature方法.
12)图元的删除:
和其它编程语言一样,删除图元使用DeleteFeature方法,有关介绍请参看MapX的联机帮助和开发手册.
练习:
1.结合以上例子,并参考相关资料,在地图上建立一个临时图层,并在该图层上加入图标类型(.bmp文件)的图元.
2.自定义一个工具,使用该工具删除图元.
注意: 在对图元操作之前请备份好地图文件,避免不必要的损失.
|