向AxPageLayoutControl的PageLayout中添加格网分为两种情况: 添加经纬网 和 添加公里网。
两种情况的很多代码都是相同的,不过区别的地方也是很关键的。
创建经纬网时,是将IMapGrid的对象赋值给IMeasuredGrid对象。
创建公里网时,是将IMeasuredGrid对象的对象赋值给IMapGrid的对象,同时还要为IMeasuredGrid的对象设置投影属性(IProjectedGrid)。
具体代码:
1、创建经纬网。
/// <summary>
/// 为PageLayout对象添加经纬网格
/// </summary>
/// <param name="pPageLayout"></param>
///
public void CreateGraticuleMapGrid(IPageLayout pPageLayout)
{
//获取MapFrame对象
IActiveView pActiveView = pPageLayout as IActiveView;
IMap pMap = pActiveView.FocusMap;
IGraphicsContainer pGraphicsContainer = pActiveView as IGraphicsContainer;
IMapFrame. pMapFrame. = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
IMapGrids pMapGrids = pMapFrame. as IMapGrids;
//创建网格对象
IMapGrid pMapGrid = new GraticuleClass();// (IGraticule)pServerContext.CreateObject("esriCarto.Graticule");
pMapGrid.Name = "Map Grid";
//设置网格线的符号样式
ICartographicLineSymbol pLineSymbol;
pLineSymbol = new CartographicLineSymbolClass();
pLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
pLineSymbol.Width = 1;
IRgbColor rgbColor = new RgbColor();
rgbColor.Red = 166;
rgbColor.Green = 187;
rgbColor.Blue = 208;
IColor color = rgbColor as IColor;
pLineSymbol.Color = color;
pMapGrid.LineSymbol = pLineSymbol;
//设置网格的边框样式,为简单边框样式
ISimpleMapGridBorder simpleMapGridBorder = new SimpleMapGridBorderClass();
ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
simpleLineSymbol.Style. = esriSimpleLineStyle.esriSLSSolid;
simpleLineSymbol.Color = BuildRGB(0, 0, 0);
simpleLineSymbol.Width = 2;
simpleMapGridBorder.LineSymbol = simpleLineSymbol as ILineSymbol;
pMapGrid.Border = simpleMapGridBorder as IMapGridBorder ;
pMapGrid.SetTickVisibility(true, true, true, true);
//设置网格的主刻度的样式和可见性
pMapGrid.TickLength = 15;
pLineSymbol = new CartographicLineSymbolClass();
pLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
pLineSymbol.Width = 1;
pLineSymbol.Color = color;
pMapGrid.TickMarkSymbol = null;
pMapGrid.TickLineSymbol = pLineSymbol;
pMapGrid.SetTickVisibility(true, true, true, true);
//设置网格的次一级刻度的样式和可见性
pMapGrid.SubTickCount = 5;
pMapGrid.SubTickLength = 10;
pLineSymbol = new CartographicLineSymbolClass();
pLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
pLineSymbol.Width = 0.1;
pLineSymbol.Color = color;
pMapGrid.SubTickLineSymbol = pLineSymbol;
pMapGrid.SetSubTickVisibility(true, true, true, true);
//设置网格的标签的样式和可见性
IGridLabel pGridLabel;
pGridLabel = pMapGrid.LabelFormat;
pGridLabel.LabelOffset = 15;
stdole.StdFont pFont = new stdole.StdFont();
pFont.Name = "Arial";
pFont.Size = 16;
pMapGrid.LabelFormat.Font = pFont as stdole.IFontDisp;
//设置网格的可见性
pMapGrid.Visible = true;
//创建IMeasuredGrid对象
IMeasuredGrid pMeasuredGrid;
pMeasuredGrid = pMapGrid as IMeasuredGrid;
pMeasuredGrid.FixedOrigin = true;
pMeasuredGrid.XIntervalSize = 0.5; //meridian interval
pMeasuredGrid.XOrigin = 109; //shift grid 5
pMeasuredGrid.YIntervalSize = 0.5; //parallel interval
pMeasuredGrid.YOrigin = 40; //shift grid 5
//将网格对象添加到地图控件中
pMapGrids.AddMapGrid(pMapGrid);
//刷新地图
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null);
}
2、创建公里网。
public void CreateMeasuredGrid(IPageLayout pPageLayout)
{
try
{
//获取MapFrame对象
IActiveView pActiveView = pPageLayout as IActiveView;
IMap pMap = pActiveView.FocusMap;
IGraphicsContainer pGraphicsContainer = pActiveView as IGraphicsContainer;
IMapFrame. pMapFrame. = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
IMapGrids pMapGrids = pMapFrame. as IMapGrids;
//创建MeasuredGrid对象
IMeasuredGrid pMeasuredGrid = new MeasuredGrid() as IMeasuredGrid;
//设置pMeasuredGrid的投影属性
IProjectedGrid pProjectedGrid = (IProjectedGrid)pMeasuredGrid;
pProjectedGrid.SpatialReference = Map.SpatialReference;
double MaxX,MaxY,MinX,MinY;//动态获取坐标系中的坐标范围,以便设置网格的起始点和间隔
pProjectedGrid.SpatialReference.GetDomain(out MinX, out MaxX , out MinY , out MaxY );
pMeasuredGrid.FixedOrigin = true;
pMeasuredGrid.Units = Map.MapUnits;
pMeasuredGrid.XIntervalSize = (MaxX-MinX)/20;
pMeasuredGrid.XOrigin = MinX;
pMeasuredGrid.YIntervalSize = (MaxY - MinY)/20 ;
pMeasuredGrid.YOrigin = MinY;
//将pMeasuredGrid赋值个IMapGrid对象
IMapGrid pMapGrid = (IMapGrid)pMeasuredGrid;
pMapGrid.Name = "Measureed Grid";
//设置网格线的符号样式
ICartographicLineSymbol pLineSymbol;
pLineSymbol = new CartographicLineSymbolClass();
pLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
pLineSymbol.Width = 1;
IRgbColor rgbColor = new RgbColor();
rgbColor.Red = 166;
rgbColor.Green = 187;
rgbColor.Blue = 208;
IColor color = rgbColor as IColor;
pLineSymbol.Color = color;
pMapGrid.LineSymbol = pLineSymbol;
//设置ICalibratedMapGridBorder的属性
ICalibratedMapGridBorder pCalibratedBorder = (ICalibratedMapGridBorder)new CalibratedMapGridBorder();
IRgbColor gCol = new RgbColor();
gCol.Red = 255;
gCol.Blue = 255;
gCol.Green = 255;
pCalibratedBorder.BackgroundColor = gCol;
IRgbColor ForeColor = new RgbColor();
ForeColor.Red = 0;
ForeColor.Blue = 0;
ForeColor.Green = 0;
pCalibratedBorder.ForegroundColor = ForeColor;
pCalibratedBorder.BorderWidth = 2;
pCalibratedBorder.Interval = 50;
pCalibratedBorder.Alternating = true;
pMapGrid.Border = (IMapGridBorder)pCalibratedBorder;
//设置网格的主刻度的样式和可见性
pMapGrid.TickLength = 15;
pLineSymbol = new CartographicLineSymbolClass();
pLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
pLineSymbol.Width = 1;
pLineSymbol.Color = color;
pMapGrid.TickMarkSymbol = null;
pMapGrid.TickLineSymbol = pLineSymbol;
pMapGrid.SetTickVisibility(true, true, true, true);
//设置网格的次一级刻度的样式和可见性
pMapGrid.SubTickCount = 5;
pMapGrid.SubTickLength = 10;
pLineSymbol = new CartographicLineSymbolClass();
pLineSymbol.Cap = esriLineCapStyle.esriLCSButt;
pLineSymbol.Width = 0.1;
pLineSymbol.Color = color;
pMapGrid.SubTickLineSymbol = pLineSymbol;
pMapGrid.SetSubTickVisibility(true, true, true, true);
//标签格式设置IGridLabel
IGridLabel pGridLabel;
pGridLabel = pMapGrid.LabelFormat;
pGridLabel.LabelOffset = 15;
stdole.StdFont pFont = new stdole.StdFont();
pFont.Name = "Arial";
pFont.Size = 16;
pMapGrid.LabelFormat.Font = pFont as stdole.IFontDisp;
//设置网格的可见性
pMapGrid.Visible = true;
//添加网格对象到地图控件中
pMapGrids.AddMapGrid(pMapGrid);
//刷新地图
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null);
}
catch (Exception EX)
{
throw EX;
}
}