地图对象(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);
}
}
}
联系客服