您的位置:首页 > Web前端

C#.net 地图控件开发(九) 矢量图层与绘制FeatureLayer

2013-04-12 11:51 381 查看

矢量图层

矢量图是基于直角坐标系统,用点、线、多边形描述地理要素的数据模型或数据结构。每一个地理要素由一系列有顺序的的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.Geometryas
PointClass;
Point point = FromMapPoint(pointClass);
PointSymbolClass symbol;
if (feature.Symbol ==null)
symbol = base.Symbolas
PointSymbolClass;
else
symbol = feature.Symbol
as PointSymbolClass;
int offect = (int)symbol.Radius;
Rectangle rect =new
Rectangle(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.Symbolas
LineSymbolClass;
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.Symbolas
PolygonSymbolClass;
else
symbol = feature.Symbol
as PolygonSymbolClass;
Pen pen =
new Pen(symbol.BorderColor);
SolidBrush solidBrush =new
SolidBrush(symbol.FillColor);
PolygonClass polygon = (PolygonClass)feature.Geometry;
Point[] points =new
Point[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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: