地图是按照一定的法则,有选择地以二维(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
}
}联系客服