ArcGIS Engine - 动态添加方里网

在这里插入图片描述

		/// <summary>
        /// 添加方里网
        /// </summary>
        public static CreateMeasuredGrid(AxMapControl MapControl, AxPageLayoutControl PageLayoutControl)
        {
            if (MapControl.Map.SpatialReference != null)
            {
                //获取MapFrame对象
                IActiveView pActiveView = PageLayoutControl.PageLayout as IActiveView;
                IMap pMap = pActiveView.FocusMap;
                IGraphicsContainer pGraphicsContainer = pActiveView as IGraphicsContainer;
                IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
                IMapGrids pMapGrids = pMapFrame as IMapGrids;

                if (pMapGrids.MapGridCount == 0)
                {
                    //创建MeasuredGrid对象           
                    pMeasuredGrid = new MeasuredGrid() as IMeasuredGrid;
                    //设置pMeasuredGrid的投影属性
                    IProjectedGrid pProjectedGrid = (IProjectedGrid)pMeasuredGrid;
                    pProjectedGrid.SpatialReference = MapControl.Map.SpatialReference;
                    double MaxX, MaxY, MinX, MinY;//动态获取坐标系中的坐标范围,以便设置网格的起始点和间隔
                    pProjectedGrid.SpatialReference.GetDomain(out MinX, out MaxX, out MinY, out MaxY);
                    pMeasuredGrid.FixedOrigin = true;
                    pMeasuredGrid.Units = MapControl.Map.MapUnits;
                    pMeasuredGrid.XOrigin = MinX;
                    pMeasuredGrid.YOrigin = MinY;
                }
                else
                {
                    pMeasuredGrid = (IMeasuredGrid)pMapGrids.get_MapGrid(0);
                }
              
                //设置网格其他属性
                GridProperty pGridProperty = new GridProperty(PageLayoutControl, pMeasuredGrid, pMapGrids);
                pGridProperty.ShowDialog();

            }
            else
            {
                MessageBox.Show("请先加载数据!", "提示");
            }
        }

自定义窗体代码:

using Com.XXW.NTSL.SymbolManagement;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Com.XXW.NTSL.PrintOut
{
    public partial class GridProperty : Form
    {
        private AxPageLayoutControl pPageLayoutControl;
        private IActiveView pActiveView;
        private IMapGrid pMapGrid;
        private IMapGrids pMapGrids;
        private IMeasuredGrid pMeasuredGrid;
        private IMarkerSymbol pIMarkerSymbol;
        private ICartographicLineSymbol pCartographicLineSymbol;
        private ILineSymbol pLineSymbol;
        private ISimpleMapGridBorder simpleMapGridBorder;
        private IGridLabel pGridLabel;
        private ITextSymbol pTextSymbol;

        public GridProperty(AxPageLayoutControl PageLayoutControl, IMeasuredGrid MeasuredGrid, IMapGrids MapGrids)
        {
            InitializeComponent();

            IActiveView ActiveView = PageLayoutControl.PageLayout as IActiveView;
            pPageLayoutControl = PageLayoutControl;
            pActiveView = ActiveView;
            pMapGrids = MapGrids;
            pMeasuredGrid = MeasuredGrid;
            pMapGrid = (IMapGrid)pMeasuredGrid;

            InitializeGrid();
            if (MapGrids.MapGridCount == 0)
            {
                GridDelete.Enabled = false;
            }
            else
            {
                GridDelete.Enabled = true;
                updateProperty();
            }
        }

        private void InitializeGrid()
        {
            //设置内部网格点的符号样式
            pIMarkerSymbol = new SimpleMarkerSymbolClass();
            pIMarkerSymbol.Size = 2;

            //设置内部网格线的符号样式
            pCartographicLineSymbol = new CartographicLineSymbolClass();
            pCartographicLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
            pCartographicLineSymbol.Width = 0.1;
            IRgbColor rgbColor = new RgbColor();
            rgbColor.Red = 105;
            rgbColor.Green = 105;
            rgbColor.Blue = 105;
            IColor color = rgbColor as IColor;
            pCartographicLineSymbol.Color = color;
            pLineSymbol = pCartographicLineSymbol;

            //设置网格的刻度的样式和可见性
            pMapGrid.TickLength = 2;
            ICartographicLineSymbol pLineSymbol1;
            pLineSymbol1 = new CartographicLineSymbolClass();
            pLineSymbol1.Cap = esriLineCapStyle.esriLCSButt;
            pLineSymbol1.Width = 0.5;
            IRgbColor Color = new RgbColor();
            Color.Red = 0;
            Color.Green = 0;
            Color.Blue = 0;
            IColor color_block = Color as IColor;
            pLineSymbol1.Color = color_block;
            pMapGrid.TickLineSymbol = pLineSymbol1;
            pMapGrid.SetTickVisibility(true, true, true, true);

            //设置网格的边框样式,为简单边框样式
            simpleMapGridBorder = new SimpleMapGridBorderClass();
            ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
            simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
            simpleLineSymbol.Color = color_block;
            simpleLineSymbol.Width = 1;
            simpleMapGridBorder.LineSymbol = simpleLineSymbol as ILineSymbol;

            //标签格式设置IGridLabel
            IFormattedGridLabel pFormattedGridLabel = new FormattedGridLabelClass();
            INumericFormat pNumericFormat = new NumericFormatClass();
            pNumericFormat.AlignmentOption = esriNumericAlignmentEnum.esriAlignLeft;
            pNumericFormat.RoundingOption = esriRoundingOptionEnum.esriRoundNumberOfDecimals;
            pNumericFormat.RoundingValue = 0;
            pNumericFormat.ShowPlusSign = false;
            pNumericFormat.ZeroPad = true;
            pFormattedGridLabel.Format = pNumericFormat as INumberFormat;
            pGridLabel = pFormattedGridLabel as IGridLabel;
            pGridLabel.LabelOffset = 3;
            pGridLabel.Color = color_block;
            pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisLeft, false);
            pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisRight, false);
            stdole.StdFont pFont = new stdole.StdFont();
            pFont.Size = 5;
            pGridLabel.Font = pFont as stdole.IFontDisp;
        }

        private void updateProperty()
        {
            GridName.Text = pMapGrid.Name;

            XIntervalSize.Value = (decimal)pMeasuredGrid.XIntervalSize;
            YIntervalSize.Value = (decimal)pMeasuredGrid.YIntervalSize;

            if (pMapGrid.LineSymbol == null)
            {
                rB_null.Checked = true;
            }
            if (pMapGrid.TickMarkSymbol != null)
            {
                rB_Marker.Checked = true;
            }
            if (pMapGrid.LineSymbol != null)
            {
                rB_Line.Checked = true;
            }

            if (pMapGrid.LabelFormat.get_LabelAlignment(esriGridAxisEnum.esriGridAxisTop) == true)
            {
                up.Checked = true;
            }
            if (pMapGrid.LabelFormat.get_LabelAlignment(esriGridAxisEnum.esriGridAxisLeft) == true)
            {
                left.Checked = true;
            }
            if (pMapGrid.LabelFormat.get_LabelAlignment(esriGridAxisEnum.esriGridAxisBottom) == true)
            {
                down.Checked = true;
            }
            if (pMapGrid.LabelFormat.get_LabelAlignment(esriGridAxisEnum.esriGridAxisRight) == true)
            {
                right.Checked = true;
            }

            num_LabelOffset.Value = (decimal)pMapGrid.LabelFormat.LabelOffset;

        }

        private void updateMapGrid()
        {
            if (XIntervalSize.Value != 0 && YIntervalSize.Value != 0)
            {
                pMapGrids.ClearMapGrids();
                //设置网格名称
                pMapGrid.Name = GridName.Text;

                //设置X、Y间距
                pMeasuredGrid.XIntervalSize = (double)XIntervalSize.Value;
                pMeasuredGrid.YIntervalSize = (double)YIntervalSize.Value;

                //设置外观
                if (rB_null.Checked)
                {
                    pMapGrid.LineSymbol = null;
                    pMapGrid.TickMarkSymbol = null;
                }
                if (rB_Marker.Checked)
                {
                    pMapGrid.TickMarkSymbol = pIMarkerSymbol;
                    pMapGrid.LineSymbol = null;
                }
                if (rB_Line.Checked)
                {
                    pMapGrid.TickMarkSymbol = null;
                    pMapGrid.LineSymbol = pLineSymbol;
                }

                //设置标注
                pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisTop, up.Checked);
                pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisLeft, left.Checked);
                pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisBottom, down.Checked);
                pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisRight, right.Checked);
                pGridLabel.LabelOffset = (double)num_LabelOffset.Value;

                if (pTextSymbol != null)
                {
                    pGridLabel.Font = pTextSymbol.Font;
                    pGridLabel.Color = pTextSymbol.Color;
                }
                pMapGrid.LabelFormat = pGridLabel;

                //设置网格边框
                pMapGrid.Border = simpleMapGridBorder as IMapGridBorder;
                pMapGrid.SetTickVisibility(true, true, true, true);
                //设置网格的可见性
                pMapGrid.Visible = true;

                try
                {
                    //添加网格对象到地图控件中   
                    pMapGrids.AddMapGrid(pMapGrid);
                    //刷新地图
                    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("设置方里网失败!" + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("请设置格网间距!", "提示");
            }
        
        }

        private void simpleButton_ok_Click(object sender, EventArgs e)
        {
            updateMapGrid();
            pPageLayoutControl.MousePointer = esriControlsMousePointer.esriPointerDefault;
            this.Close();
        }

        private void simpleButton_cancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void GridDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("是否删除网格?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
            {
                pMapGrids.ClearMapGrids();
                pActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null);
                this.Close();
            }
        }

        private void Grid_Style_Click(object sender, EventArgs e)
        {
            ISymbol pSymbol = null;
            if (rB_Marker.Checked)
            {
                if (pMapGrids.MapGridCount == 0 || pMapGrid.TickMarkSymbol == null)
                {
                    pSymbol = pIMarkerSymbol as ISymbol;
                }
                else
                {
                    pSymbol = pMapGrid.TickMarkSymbol as ISymbol;
                }
                SymbolForm pSymbolForm = new SymbolForm(pSymbol);
                pSymbolForm.ShowDialog();
                pIMarkerSymbol = pSymbolForm.getSymbol() as IMarkerSymbol;

            }
            if (rB_Line.Checked)
            {
                if (pMapGrids.MapGridCount == 0 || pMapGrid.LineSymbol == null)
                {
                    pSymbol = pLineSymbol as ISymbol;
                }
                else
                {
                    pSymbol = pMapGrid.LineSymbol as ISymbol;
                }
                SymbolForm pSymbolForm = new SymbolForm(pSymbol);
                pSymbolForm.ShowDialog();
                pLineSymbol = pSymbolForm.getSymbol() as ILineSymbol;
            }

        }

        private void Text_Style_Click(object sender, EventArgs e)
        {
            ITextSymbol pSymbol = new TextSymbolClass();
            if (pMapGrids.MapGridCount != 0)
            {
                pSymbol.Font = pMapGrid.LabelFormat.Font;
                pSymbol.Color = pMapGrid.LabelFormat.Color;
            }

            SymbolForm pSymbolForm = new SymbolForm(pSymbol as ISymbol);
            pSymbolForm.ShowDialog();
            pTextSymbol = pSymbolForm.getSymbol() as ITextSymbol;
        }

        private void simpleButton_Click(object sender, EventArgs e)
        {
            ISymbol pSymbol = null;
            if (pMapGrids.MapGridCount == 0)
            {
                pSymbol = simpleMapGridBorder.LineSymbol as ISymbol;
            }
            else
            {
                simpleMapGridBorder = pMapGrid.Border as ISimpleMapGridBorder;
                pSymbol = simpleMapGridBorder.LineSymbol as ISymbol;
            }
            SymbolForm pSymbolForm = new SymbolForm(pSymbol);
            pSymbolForm.ShowDialog();
            simpleMapGridBorder.LineSymbol = pSymbolForm.getSymbol() as ILineSymbol;
        }

        private void rB_null_CheckedChanged(object sender, EventArgs e)
        {
            Grid_Style.Enabled = false;
        }

        private void rB_Marker_CheckedChanged(object sender, EventArgs e)
        {
            Grid_Style.Enabled = true;
        }

        private void rB_Line_CheckedChanged(object sender, EventArgs e)
        {
            Grid_Style.Enabled = true;
        }   
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王八八。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值