地图对象
地图对象(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,new
EventArgs());
}
}
}
///<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);
}
}
}
|