打开APP
userphoto
未登录

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

开通VIP
C#.net 地图控件开发(十) 地图对象Map

地图对象

        地图对象(Map)是地图图层的集合,包含地图的常用属性,如比例尺,中心坐标,基准点坐标等,即对整个地图进行统一管理的一个类。

地图对象类

        作用:对地图进行管理。

        类:包含地图图层集合,常用地图属性,并提供地图刷新的方法,控件坐标与地图坐标的相互转换方法。

 

namespace GIS.HJ.Core

{

    ///<summary>

    ///地图对象

    ///</summary>

    public class Map

    {

        ///<summary>

        ///默认构造函数

        ///</summary>

        public Map(MapControl mapControl)

        {

            _MapControl = mapControl;

            _MapControl.SizeChanged += newEventHandler(_MapControl_SizeChanged);

            _MapControl.Paint += new System.Windows.Forms.PaintEventHandler(_MapControl_Paint);

            Layers = new List<LayerClass>();

        }

        ///<summary>

        ///地图控件

        ///</summary>

        private MapControl _MapControl = null;

        ///<summary>

        ///图层

        ///</summary>

        public List<LayerClass> Layers { get; set; }

        private double _CorX = 0;

        ///<summary>

        ///实际坐标原点X

        ///</summary>

        public double CorX

        {

            get { return _CorX; }

            set

            {

                _CorX = value;

                LayerClass.CorX =value;

            }

        }

        private double _CorY = 0;

        ///<summary>

        ///实际坐标原点Y

        ///</summary>

        public double CorY

        {

            get { return _CorY; }

            set

            {

                _CorY = value;

                LayerClass.CorY =value;

            }

        }

        private int _CtlWidth = 1;

        ///<summary>

        ///控件宽度

        ///</summary>

        public int CtlWidth

        {

            get { return _CtlWidth; }

            set

            {

                _CtlWidth = value;

            }

        }

        private int _CtlHeight = 1;

        ///<summary>

        ///控件高度

        ///</summary>

        public int CtlHeight

        {

            get { return _CtlHeight; }

            set

            {

                _CtlHeight = value;

                LayerClass.CtlHeight =value;

            }

        }

        private double _MapScale = 1;

        ///<summary>

        ///地图比例尺

        ///</summary>

        public double MapScale

        {

            get { return _MapScale; }

            set

            {

                if (value != _MapScale)

                {

                    double oldScale = _MapScale;

                    CorX = _CorX + (oldScale - value) * _CtlWidth / 2F;

                    CorY = _CorY + (oldScale - value) * _CtlHeight / 2F;

                    _MapScale = value;

                    LayerClass.MapScale =value;

                    _MapControl.Invalidate();

                    if (this.ScaleChanged !=null)

                        this.ScaleChanged(this,newEventArgs());

                }

            }

        }

        ///<summary>

        ///地图定位中心

        ///</summary>

        ///<param name="hPoint"></param>

        public void CenterAt(PointClass hPoint)

        {

            CorX = hPoint.X - _CtlWidth / 2.0f * _MapScale;

            CorY = hPoint.Y - _CtlHeight / 2.0f * _MapScale;

            _MapControl.Invalidate();

        }

        ///<summary>

        ///刷新地图

        ///</summary>

        public void Refresh()

        {

            _MapControl.Invalidate();

        }

        ///<summary>

        ///比例尺改变事件

        ///</summary>

        public event EventHandler ScaleChanged;

        ///<summary>

        ///绘图函数

        ///</summary>

        ///<param name="sender"></param>

        ///<param name="e"></param>

        private void _MapControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

        {

            if (CtlHeight == 0 || CtlWidth == 0)return;

            foreach (LayerClass layerin Layers)

            {

                if (layer.Visible)

                {

                    layer.DrawShape(e.Graphics);

                }

            }

        }

        ///<summary>

        ///地图控件大小改变

        ///</summary>

        ///<param name="sender"></param>

        ///<param name="e"></param>

        private void _MapControl_SizeChanged(object sender,EventArgs e)

        {

            CtlHeight = _MapControl.Height;

            CtlWidth = _MapControl.Width;

            _MapControl.Invalidate();

        }

        ///<summary>

        ///坐标转换,从控件坐标到地图坐标

        ///</summary>

        ///<param name="point"></param>

        ///<returns></returns>

        public PointClass ToMapPoint(Point point)

        {

            return LayerClass.ToMapPoint(point);

        }

        ///<summary>

        ///坐标转换,从地图坐标到控件坐标

        ///</summary>

        ///<param name="hPoint"></param>

        ///<returns></returns>

        public Point FromMapPoint(PointClass point)

        {

            return LayerClass.FromMapPoint(point);

        }

    }

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
第三讲 MapControl与PageLayoutControl同步
在地图屏幕上绘制点、线、面符号
正则表达式判断是否是中文
自定义MapMode实现Bingmap地图投影模式
Bing Map 自定义操作类
如何获取鼠标点击mapcontrol时的地图坐标?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服