SuperMap Layer(图层) |
扩展图层功能可以创建用户自己的图层类型,由用户决定图层在地图上的绘制情况。例如,用户已经有了自己的数据,但是数据格式又不是SuperMap的数据格式,如何想不通过数据转换的方法,将这些数据显示到SuperMap的地图中,您就可以通过扩展图层功能,自定义绘制这些数据到地图上,形成自己的数据图层。
例如:下图的内容就是通过扩展图层来自定义绘制特有数据的结果。
自定义图层
用户的图层要显示到SuperMap地图窗口中,就必须继承LayerExtensionBase类,LayerExtensionBase类继承自Layer类。如何实现自己的图层类型呢?您必须实现LayerExtensionBase类中的一系列接口,才能将您的数据绘制到SuperMap地图上,下面通过示例代码为您讲解自定义图层的关键要点。
示例中自定义了一个BruTileLayer图层类型。自定义图层必须实现的接口以及如何实现,对应的接口注释都具体介绍了,请参见。
namespace SuperMap.iObjects.Extension { /// <summary> /// 1. 自定义图层类型必须继承LayerExtensionBase类。 /// </summary> public class BruTileLayer : LayerExtensionBase { private const Int32 LayerExtensionType = 1001; /// <summary> /// 2. 实现 LayerExtensionBase.ExtensionType 接口。 /// 定义您的图层类型,该属性值可以为任意一个整数。 /// </summary> public override int ExtensionType { get{ return LayerExtensionType; } }
/// <summary> /// 3. 该接口处将实现您的图层数据如何在SuperMap地图上进行绘制。 /// 该接口中的参数为MapPainter类型,该类型中的MapPainter.Graphics可以绘制自定义对象。 /// </summary> public override void OnDraw(MapPainter painter) { //自定义绘制实现代码 }
/// <summary> /// 4. 这个事件处理函数您要注意了,其作用特别重要。他是系统用来识别用户创建的所有继承于LayerExtensionBase的自定义类型的图层;您需要在这个事件中显示的告诉系统创建哪种类型的自定义图层。 /// </summary> static void LayerExtensionBase_LayerExtensionBaseCreated(object sender, LayerExtensionBaseCreatedEventArgs e) { if (e.ExtensionType == LayerExtensionType) { e.LayerExtension = new BruTileLayer(e.Handle); } } static BruTileLayer() { LayerExtensionBase.LayerExtensionBaseCreated += LayerExtensionBase_LayerExtensionBaseCreated; }
/// <summary> /// 5. 该构造函数用于用户代码中显示创建一个新的BruTileLayer使用。 /// </summary> public BruTileLayer() : this(IntPtr.Zero) {}
/// <summary> /// 6. 打开了保持有该类型图层的地图时,SuperMap内部需要在LayerExtensionBaseCreated事件中通过此构造函数才能正确构造此对象 /// </summary> /// <param name="handle"></param> public BruTileLayer(IntPtr handle) :base(handle) { // 实现代码 }
/// <summary> /// 7. 实现将图层信息输出为 XML 字符串保存。 /// </summary> public override string ToXML(WorkspaceVersion version) { // 实现代码 }
/// <summary> /// 8. 与ToXML方法配合使用,实现通过XML字符串构建图层对象。 /// </summary> public override void FromXML(string xml) { // 实现代码 } } } |
有了上面的用户自定义的图层类型,那么,就可以通过--方法:Layers.Add (Layer)—将您自定义的图层对象添加到地图的图层集合中,在地图中显示您的图层数据。