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