赞
踩
地图整饰的思路与流程
首先,鼠标交互选择图幅。用户在含有图幅索引图层的数据图上,用鼠标左击选择某幅图;然后系统通过空间检索,自动选定包含该图的标准图幅,据内外图廓间距扩展绘制出外图廓。同时根据左下角坐标生成方里网,并在地图上标注出方里网注记。再将接图表、图廓注记、比例尺和图号等图廓.整饰要素一一生成出来
。从而实现内外图廓、图外整饰信息的统一自动生成,完成地图的自动化整饰。对于任意范围图形整饰,主要考虑到用户的需求。用户有时需要对感兴趣的某些区域地图整饰输出.然后获取该区.域范围的四角坐标。以左下角点最小坐标为基点,自动绘制出内外图廓和接图表、图廓注记、方里网、方里网注记等地图整饰信息。最后在出图整饰窗口进行模拟地图输出.
步骤:
1图廓参数的输入:地图框架模版
包括图廓的比例尺、内外图廓线、坐标格网线,以及一些其他参数。具体包括绘制接图表、制图日期、秘密等级、制图单位、坐标系、资料来源及相应注记。这样,图幅、任意范围方式的出图将根据模板中设置的参数方便快捷地自动生成图廓,以满足整饰要求
2图廓的绘制
图廓边界由获取的图幅角点坐标通过绘图语句绘制内图廓,然后再根据地图坐标生成坐标格网线,并计算外图廓各角点坐标值,按照要求生成外图廓
ArcEngine中的IFillShapeElement、ISimple-LineSymbol、IBorder、ISymbolBorder接口和IMapFrame的Border属性与MapBounds属性
添加图例、比例尺、指北针
指北针
C#代码
1 public void AddNorthArrow(IPageLayout pageLayout)
2 {
3 IGraphicsContainer container = pageLayout as IGraphicsContainer;
4 IActiveView activeView = pageLayout as IActiveView;
5 // 获得MapFrame
6 IFrameElement frameElement = container.FindFrame(activeView.FocusMap);
7 IMapFrame mapFrame = frameElement as IMapFrame;
8 //根据MapSurround的uid,创建相应的MapSurroundFrame和MapSurround
9 UID uid = new UIDClass();
10 uid.Value = “esriCarto.MarkerNorthArrow”;
11 IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null);
12 //设置MapSurroundFrame中指北针的点符号
13 IMapSurround mapSurround = mapSurroundFrame.MapSurround;
14 IMarkerNorthArrow markerNorthArrow = mapSurround as IMarkerNorthArrow;
15 IMarkerSymbol markerSymbol = markerNorthArrow.MarkerSymbol;
16 markerSymbol.Size = 18;
17 markerNorthArrow.MarkerSymbol = markerSymbol;
18 //QI,确定mapSurroundFrame的位置
19 IElement element = mapSurroundFrame as IElement;
20 IEnvelope envelope = new EnvelopeClass();
21 envelope.PutCoords(0.2, 0.2, 5, 5);
22 element.Geometry = envelope;
23 //使用IGraphicsContainer接口添加显示
24 container.AddElement(element, 0);
25 activeView.Refresh();
26 }
比例尺
C#代码
27 public void AddScalebar(IPageLayout pageLayout)
28 {
29 IGraphicsContainer container = pageLayout as IGraphicsContainer;
30 IActiveView activeView = pageLayout as IActiveView;
31 // 获得MapFrame
32 IFrameElement frameElement = container.FindFrame(activeView.FocusMap);
33 IMapFrame mapFrame = frameElement as IMapFrame;
34 //根据MapSurround的uid,创建相应的MapSurroundFrame和MapSurround
35 UID uid = new UIDClass();
36 uid.Value = “esriCarto.AlternatingScaleBar”;
37 IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null);
38 //设置MapSurroundFrame中比例尺的样式
39 IMapSurround mapSurround = mapSurroundFrame.MapSurround;
40 IScaleBar markerScaleBar = ((IScaleBar)mapSurround);
41 markerScaleBar.LabelPosition = esriVertPosEnum.esriBelow;
42 markerScaleBar.UseMapSettings();
43 //QI,确定mapSurroundFrame的位置
44 IElement element = mapSurroundFrame as IElement;
45 IEnvelope envelope = new EnvelopeClass();
46 envelope.PutCoords(0.2, 0.2, 1, 2);
47 element.Geometry = envelope;
48 //使用IGraphicsContainer接口添加显示
49 container.AddElement(element, 0);
50 activeView.Refresh();
51 }
图例
C#代码
52 private void AddLegend(IPageLayout pageLayout)
53 {
54 IActiveView pActiveView = pageLayout as IActiveView;
55 IGraphicsContainer container = pageLayout as IGraphicsContainer;
56 // 获得MapFrame
57 IMapFrame mapFrame = container.FindFrame(pActiveView.FocusMap) as IMapFrame;
58 //根据MapSurround的uid,创建相应的MapSurroundFrame和MapSurround
59 UID uid = new UIDClass();
60 uid.Value = “esriCarto.Legend”;
61 IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null);
62 //设置图例的Title
63 ILegend2 legend = mapSurroundFrame.MapSurround as ILegend2;
64 legend.Title = “地图图例”;
65 ILegendFormat format = new LegendFormatClass();
66 ITextSymbol symbol = new TextSymbolClass();
67 symbol.Size = 4;
68 format.TitleSymbol = symbol;
69 legend.Format = format;
70 //QI,确定mapSurroundFrame的位置
71 IElement element = mapSurroundFrame as IElement;
72 IEnvelope envelope = new EnvelopeClass();
73 envelope.PutCoords(2, 2, 8, 8);
74 element.Geometry = envelope;
75 //使用IGraphicsContainer接口添加显示
76 container.AddElement(element, 0);
77 pActiveView.Refresh();
78 }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。