SuperMap iObjects .NET 11i 知识库
SuperMap Layer(图层)  

5  扩展图层(自定义图层)

扩展图层功能可以创建用户自己的图层类型,由用户决定图层在地图上的绘制情况。例如,用户已经有了自己的数据,但是数据格式又不是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)—将您自定义的图层对象添加到地图的图层集合中,在地图中显示您的图层数据。

 


  版权所有© 北京超图软件股份有限公司。保留所有权利。