打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#.net 地图控件开发(二) 地图图层Layer

地图是按照一定的法则,有选择地以二维(2D)或多维形式(3D)与手段在平面或球面上表示地球(Earth)(或其它星球)若干现象的图形或图像,它具有严格的数学基础、符号系统、文字注记,并能用地图概括原则,科学地反映出自然和社会经济现象的分布特征及其相互关系。

现阶段地图的定义是:以一定的数学(Math)法则(即模式化)、符号化、抽象化反映客观实际的形象符号模型或者称为图形数学模型

地图一般都包含居民地、道路、水系、植被、境界等,这些不同的要素类型,称之为图层;图层可以分为矢量图层,影像图层,数字线划图层等,

 

图层属性

所有的图层都共同具有的属性特征,可以用做图层的基类。

图层数据来源(DataSource)、图层类型(LayerType)、图层名(Name)、图层别名(Alias)、最大显示比例尺(MaxScale)、最小显示比例尺(MinScale)、可见性(Visible)、可选择性(Choosable)、可捕捉性(Snapable)、可编辑性(Editable)

绘图的方法,在基类当中只需要声名该方法即可,而不需要写出实际的实现过程,因为对于每个不同类型的图层来说,它们的绘图方法是不一样的,所以这里将绘图方法声名为抽象方法,让子类实现绘图的过程:

基类Layer完整的代码如下:

namespace GIS.HJ.Layer

{

    ///<summary>

    ///图层基类

    ///</summary>

    public abstract class LayerClass

    {

        internal static double CorX = 0;//控件左下角图形X坐标,高比例尺下必须是double,不然图形会因为精度不准移位

        internal static double CorY = 0;//控件左下角图形Y坐标

        internal static int CtlHeight;//控件高度

        internal static double MapScale = 1;//地图比率尺

 

        ///<summary>

        ///图层名

        ///</summary>

        public string Name { get; set; }

        ///<summary>

        ///图层别名

        ///</summary>

        public string Alias { get; set; }

        ///<summary>

        ///图层类型

        ///</summary>

        public EmLayerType LayerType { get; set; }

        ///<summary>

        ///自增ShapeID

        ///</summary>

        public virtual ulong MaxShapeId { get; internal set; }

 

        ///<summary>

        ///图层最大显示比率尺

        ///</summary>

        public double MaxScale { get; set; }

        ///<summary>

        ///图层最小显示比率尺

        ///</summary>

        public double MinScale { get; set; }

 

        ///<summary>

        ///是否可视

        ///</summary>

        public bool Visible { get; set; }

        ///<summary>

        ///是否可选

        ///</summary>

        public bool Choosable { get; set; }

        ///<summary>

        ///是否捕捉

        ///</summary>

        public bool Snapable { get; set; }

        ///<summary>

        ///是否编辑

        ///</summary>

        public bool Editable { get; set; }

 

        ///<summary>

        ///图层数据的来源,如数据库或文本文件如"File\nHPointLayer\nD:\\aa.hpt"

        ///</summary>

        public string DataSource { get; set; }

 

        ///<summary>

        ///控件重绘时

        ///</summary>

        ///<param name="Graphics"></param>

        public abstract void DrawShape(Graphics Graphics);

 

        public GIS.HJ.Geometry.Point ToMapPoint(System.Drawing.Point point)

        {

            GIS.HJ.Geometry.Point result =new GIS.HJ.Geometry.Point();

            result.X = point.X * MapScale + CorX;

            result.Y = (CtlHeight - point.Y) * MapScale + CorY;

            return result;

        }

        public System.Drawing.Point FromMapPoint(GIS.HJ.Geometry.Point hPoint)

        {

            System.Drawing.Point result =new System.Drawing.Point();

            result.X = (int)((hPoint.X - CorX) / MapScale);

            result.Y = CtlHeight - (int)((hPoint.Y - CorY) / MapScale);

            return result;

        }

    }

}

 

 

其中地图类型枚举定义如下

namespace GIS.HJ.Layer

{

    ///<summary>

    ///图层类型

    ///</summary>

    public enum EmLayerType

    {

        None,

        ///<summary>

        ///点图层

        ///</summary>

        PointLayer,

        ///<summary>

        ///线图层

        ///</summary>

        LineLayer,

        ///<summary>

        ///面状图层

        ///</summary>

        PolygonLayer

    }

}             
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
基于Silverlight智能表单设计开发(二)
Winform 鼠标移入效果
C#实现文件管理器
批量删除C#注释(适用于vs开发环境)
如何在DataGridView中加入自定义组件
梦想CAD云图与GIS结合演示
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服