矢量图是基于直角坐标系统,用点、线、多边形描述地理要素的数据模型或数据结构。每一个地理要素由一系列有顺序的的x、y坐标描述,这些要素与属性相结合。
根据不同的几何类型,将矢量图分为点、线多边形三种图层类型,并抽像出一个基类用来存储矢量图的共同属性和方法。
作用:存储矢量图层的共同属性和方法
类: 包含该图层的所有地图要素,和默认的地图符号
namespace GIS.HJ.Layer
{
///<summary>
///要素图层
///</summary>
public abstractclassFeatureLayerClass:LayerClass
{
///<summary>
///构造函数
///</summary>
publicFeatureLayerClass()
{
Features = newList<FeatureClass>();
}
///<summary>
///图层所包含的要素
///</summary>
public List<FeatureClass>Features { get; set;}
///<summary>
///图层样式
///</summary>
public SymbolClass Symbol { get;set; }
///<summary>
///要素图层绘图方法,让子类去实现
///</summary>
///<paramname="Graphics"></param>
public override voidDrawShape(Graphics Graphics)
{
}
}
}
作用:按照特定的符号绘制点状地物
类:
namespace GIS.HJ.Layer
{
///<summary>
///点图层
///</summary>
public class PointLayerClass:FeatureLayerClass
{
///<summary>
///构造函数
///</summary>
publicPointLayerClass()
{
base.LayerType= LayerType.PointLayer;
base.Symbol= PointSymbolClass.Default;
}
///<summary>
///点图层的绘制方法
///</summary>
///<param name="Graphics"></param>
public override void DrawShape(Graphics g)
{
foreach (FeatureClass featurein Features)
{
PointClass pointClass = feature.GeometryasPointClass;
Point point = FromMapPoint(pointClass);
PointSymbolClass symbol;
if (feature.Symbol ==null)
symbol = base.SymbolasPointSymbolClass;
else
symbol = feature.Symbol as PointSymbolClass;
int offect = (int)symbol.Radius;
Rectangle rect =newRectangle(point.X - offect / 2, point.Y - offect / 2, offect, offect);
g.FillEllipse(newSolidBrush(symbol.PointColor), rect);
}
}
}
}
作用:按照特定的符号绘制线状地物
类:
namespace GIS.HJ.Layer
{
///<summary>
///线图层
///</summary>
public class LineLayerClass:FeatureLayerClass
{
///<summary>
///构造函数
///</summary>
publicLineLayerClass()
{
base.LayerType= LayerType.LineLayer;
base.Symbol= LineSymbolClass.Default;
}
///<summary>
///线图层的绘制方法
///</summary>
///<param name="g"></param>
public override void DrawShape(Graphics g)
{
foreach (FeatureClass featurein Features)
{
LineSymbolClass symbol;
if(feature.Symbol ==null)
symbol = base.SymbolasLineSymbolClass;
else
symbol = feature.Symbol as LineSymbolClass;
Pen pen = new Pen(symbol.LineColor);
pen.Width = symbol.Width;
pen.DashStyle = symbol.LineStyle;
LineClass line = (LineClass)feature.Geometry;
for (int i = 1; i < line.Points.Count; i++)
{
Point oldHPoint = FromMapPoint(line.Points[i - 1]);
Point newPoint = FromMapPoint(line.Points[i]);
g.DrawLine(pen, oldHPoint, newPoint);
oldHPoint = newPoint;
}
}
}
}
}
作用:按照特定的符号绘制线状地物
类:
namespace GIS.HJ.Layer
{
///<summary>
///面图层
///</summary>
public class PolygonLayerClass:FeatureLayerClass
{
///<summary>
///构造函数
///</summary>
public PolygonLayerClass()
{
base.LayerType= LayerType.PolygonLayer;
base.Symbol= PolygonSymbolClass.Default;
}
///<summary>
///面状图层的绘制方法
///</summary>
///<param name="Graphics"></param>
public override void DrawShape(Graphics g)
{
foreach (FeatureClass featurein Features)
{
PolygonSymbolClass symbol;
if (feature.Symbol ==null)
symbol = base.SymbolasPolygonSymbolClass;
else
symbol = feature.Symbol as PolygonSymbolClass;
Pen pen = new Pen(symbol.BorderColor);
SolidBrush solidBrush =newSolidBrush(symbol.FillColor);
PolygonClass polygon = (PolygonClass)feature.Geometry;
Point[] points =newPoint[polygon.Points.Count];
for (int i = 0; i < polygon.Points.Count; i++)
{
points[i] = FromMapPoint(polygon.Points[i]);
}
g.DrawPolygon(pen, points);
g.FillPolygon(solidBrush, points);
}
}
}
}
联系客服