许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  ArcGIS Engine - 动态添加方里网(网格)

ArcGIS Engine - 动态添加方里网(网格)

阅读数 18
点赞 0
article_banner

在这里插入图片描述

		/// <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;
        }   
    }
}


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空