打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

矢量图层

        矢量图是基于直角坐标系统,用点、线、多边形描述地理要素的数据模型或数据结构。每一个地理要素由一系列有顺序的的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);

            }

        }

    }

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#绘制矢量图(Metafile,WMF,EMF)
c#DateTime与unix时间戳互相转换
C# 后台判断一个字符串是否为整数或者带两位小数的数字
c#将pdf文件转换成flash swf
判断多边形是顺时针还是逆时针(C#实现)
C#图片处理之:在图片上画框(圈)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服