版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
牟乃夏ArcGISEngine地理信息系统开发教程
配套PPT
第5章地图制图目录符号化专题图制作地图整饰与输出一、符号化1.颜色模型2.地图符号化3.地图标注1.ArcGIS颜色模型1)RGB颜色模型2)CMYK颜色模型3)HSV颜色模型4)Gray模型1)RGB颜色模型这是一种最常用的颜色模型,所有的颜色都是通过红色(Red)、绿色(Green)和蓝色(Blue)这三原色的混合来显示通过显示红、绿、蓝光的像素,计算机显示器就可以描绘上百种、上千种甚至几百万种不同的颜色要定义一个表示为RGB值的颜色,用户需要分别给出光的红、绿、蓝三原色的值1)RGB颜色模型
用于RGB颜色模型的一些规则:如果所有的RGB值相等,则产生的颜色是灰色调的如果所有的RGB值为0,则产生的颜色为黑色如果所有的RGB值为255,则产生的颜色为白色2)CMYK颜色模型
CMYK是一种颜色模式,是印刷时必须使用的一种模式C、M、Y、K分别指的是青色(Cyan)、洋红色(Magenta)、黄色(Yellow)和黑色(Black)四种颜色的油墨,使用分别从0~100,也就是颜色从最浅到最深的数值。数值越小颜色越浅,反之颜色则越深,当每种颜色都达到最高值100时则为深黑色。2)CMYK颜色模型
3)HSV颜色模型
即色调(Hue)、饱和度(Saturation)和明度(Value)颜色模型色调值指明了颜色在色环中的位置,以度表示。例如,色调值为0的颜色是暗红色,而色调值为180的颜色是暗青色饱和度描述了颜色的纯度。饱和度的取值范围为0~100,因此,饱和度为20意味着中等暗色,而饱和度为100意味着可能的最纯的颜色明度(Value)也称为亮度,亮度高,色彩明亮,亮度低,色彩暗淡,明度(Value)的取值范围为0~100。值为0表示黑色,但是值为100不表示白色,它只是表明可能的最亮颜色3)HSV颜色模型
以下是用于HSV颜色模型的一些规则:如果Value=0,产生的颜色为黑色。如果Saturation=0,产生的颜色为暗灰色。如果Value=100且Saturation=0,产生的颜色为白色5)Gray模型灰度图像,由8位信息组成,并使用256级的灰色来模拟颜色层次灰度值为0表示黑色,值为255表示白色Color对象Color类是一个抽象类,它包括5个颜色子类,分别是:CmykColor类,实现了ICmykColor接口RgbColor类,实现了IRgbColor接口HsvColor类,实现了IHsvColor接口HlsColor类,实现了IHlsColor接口GrayColor类,实现了IGrayColor接口在ArcGISEngine中最常用的是RGB和HSV这两种颜色模型。下面代码是封装的获取RGB颜色值的方法
//输入RGB值,获得IRgbColor型值
publicIRgbColorGetRgbColor(intintR,intintG,intintB){IRgbColorpRgbColor=null;if(intR<0||intR>255||intG<0||intG>255||intB<0||intB>255){returnpRgbColor;}pRgbColor=newRgbColorClass();pRgbColor.Red=intR;pRgbColor.Green=intG;pRgbColor.Blue=intB;returnpRgbColor;}下面代码是封装的获取HSV颜色值的方法//输入HSV值,获得IHsvColor型值publicIHsvColorGetHsvColor(intintH,intintS,intintV){IHsvColorpHsvColor=null;if(intH<0||intH>360||intS<0||intS>100||intV<0||intV>100){returnpHsvColor;}pHsvColor=newHsvColorClass();pHsvColor.Hue=intH;pHsvColor.Saturation=intS;pHsvColor.Value=intV;returnpHsvColor;}Color类及其子类
ColorRamp类及其子类ColorRamp类的对象可以产生颜色带,这个类实现了IColorRamp接口,它定义了一系列颜色带的属性,如Size(产生多少种颜色),Colors(颜色带IEnumColor)ColorRamp是抽象类,它有4个子类,分别是AlgorithmicColorRamp(起止渐变色)MultiPartColorRamp(叠加渐变色)RandomColorRamp(随机渐变色)PresetColorRamp(预设渐变色)ColorRamp类及其子类ColorRamp类及其子类AlgorithmicColorRamp用起始颜色、终止颜色确定一个颜色带MultiPartColorRamp叠加产生颜色带RandomColorRamp随机地创建一系列颜色PresetColorRamp预设的颜色模式,可存储13种颜色4种颜色带说明AlgorithmicColorRamp类介绍及代码示例
AlgorithmicColorRamp是通过起止颜色来确定多个在这两个颜色之间的色带AlgorithmicColorRamp类实现了两个主要的接口:
IColorRamp和IAlgorithmicColorRamp,两个接口之间是接口继承关系,后者包含了前者所有的方法和属性IAlgorithmicColorRamp接口的属性,FromColor属性用于设置或返回起始颜色值,ToColor属性用于设置或返回终止颜色值。IAlgorithmicColorRamp接口的属性和方法如下:AlgorithmicColorRamp代码示例
代码示例:publicIColorRampCreateAlgorithmicColorRamp(){//创建一个新AlgorithmicColorRampClass对象IAlgorithmicColorRamppAlgColorRamp=newAlgorithmicColorRampClass();IRgbColorpFromColor=newRgbColorClass();IRgbColorpToColor=newRgbColorClass();//创建起始颜色对象
pFromColor.Red=255;pFromColor.Green=0;pFromColor.Blue=0;//创建终止颜色对象pToColor.Red=0;pToColor.Green=255;pToColor.Blue=0;
//设置AlgorithmicColorRampClass的起止颜色属性
pAlgColorRamp.ToColor=pFromColor;pAlgColorRamp.FromColor=pToColor;//设置梯度类型
pAlgColorRamp.Algorithm=esriColorRampAlgorithm.esriCIELabAlgorithm;//设置颜色带颜色数量
pAlgColorRamp.Size=10;//创建颜色带
boolbture=true;pAlgColorRamp.CreateRamp(outbture);returnpAlgColorRamp;}MultiPartColorRamp类介绍MultiPartColorRamp类是由两个色带叠加生成一个新的色带。MultiPartColorRamp类实现了IMultiPartColorRamp接口,其AddRamp方法用于添加一个基础色带。该色带可以在表达具有零点的现象(如人口增长或温度)时使用。RandomColorRamp类介绍RandomColorRamp对象产生随机颜色带,RandomColorRamp也需要设定一个范围,这个范围是HSV颜色模型的,颜色将在这个范围内随机出现RandomColorRamp类实现了IRandomColorRamp接口RandomColorRamp类介绍IRandomColorRamp接口的属性和方法如下:2.地图的符号化在ArcGISEngine中,所有地图数据及其修饰要素的显示样式都是由Symbol类控制的。主要分为三大类符号:MarkerSymbol(点符号)、LineSymbol(线符号)和FillSymbol(填充符号)来绘制地理要素的几何图形此外还有两种特殊类型的符号:一种是TextSymbol,用于文字标注;另一种是ChartRender
,用于显示饼图、条形图、柱状图等表示统计图表类型(在专题地图中详细讲述)。符号的设置1)MarkerSymbol类及其子类2)LineSymbol类及其子类3)FillSymbol类及其子类4)TextSymbol类1)MarkerSymbol类及其子类MarkerSymbol类是用于修饰点对象的符号,它主要拥有5个子类,不同的子类可以产生不同类型的点符号所有的MarkerSymbol子类都实现了IMarkerSymbol接口,这个接口定义了标记符号的公共方法和属性,如Angle、Color、Size和XOffset、YOffset等。1)MarkerSymbol类及其子类MarkerSymbol类的五个主要子类:SimpleMarkerSymbolArrowMarkerSymbolCharacterMarkerSymbolPictureMarkerSymbolMultiLayerMarkerSymbol1)MarkerSymbol类及其子类SimpleMarkerSymbol用与设置简单类型的点符号,该类实现了ISimpleMarkerSymbol接口。其Style属性用于设置点类型的样式,它有五种类型,并存储在esriSimpleMarkerStyle变量中,分别是圆形、矩形、十字形、X型、菱形。CharacterMarkerSymbol可以将点要素显示为字符,该类实现了ICharacterMarkerSymbol接口,Font属性设置字体类型,Characterindex属性用于设置或返回要显示的字符。设置显示的字符由ASCII码决定。1)MarkerSymbol类及其子类代码示例:privatevoidSimpleMaker_Click(objectsender,EventArgse){//获取目标图层ILayerpLayer=newFeatureLayerClass();pLayer=mainMapControl.get_Layer(0);IGeoFeatureLayerpGeoFeatLyr=pLayerasIGeoFeatureLayer;//设置点符号ISimpleMarkerSymbolpMarkerSymbol=newSimpleMarkerSymbol();pMarkerSymbol.Style=esriSimpleMarkerStyle.esriSMSSquare;//设置点符号样式为方形
IRgbColorpRgbColor=newRgbColor();pRgbColor=GetRgbColor(225,100,100);pMarkerSymbol.Color=pRgbColor;//设置点符号颜色
ISymbolpSymbol=(ISymbol)pMarkerSymbol;//更改符号样式
ISimpleRendererpSimpleRenderer=newSimpleRendererClass();pSimpleRenderer.Symbol=pSymbol;
pGeoFeatLyr.Renderer=pSimpleRendererasIFeatureRenderer;mainMapControl.Refresh();mainTOCControl.Update();}简单符号化的结果2)LineSymbol类及其子类
LineSymbol类是用于修饰线型几何对象的符号,它主要拥有5个子类,如SimpleLineSymbol、CartographicLineSymbol、MultiLayerLineSymbol、PictureLineSymbol、HashLineSymbol等,不同的子类可以产生不同类型的线符号所有的LineSymbol子类都实现了ILineSymbol接口,ILineSymbol定义了两个公共属性:Color和Width。2)LineSymbol类及其子类
LineSymbol类的五个主要子类:SimpleLineSymbol(预定义风格的线符号)CartographicLineSymbol(制图线符号)MultiLayerLineSymbol(多符号叠加产生的新线符号)PictureLineSymbol(图片线符号)
HashLineSymbol(离散线符号)
2)LineSymbol类及其子类
代码示例:ISimpleLineSymbolpLineSymbol;IRgbColorpRgbColor;pRgbColor=newRgbColorClass();pRgbColor.Red=255;pLineSymbol=newSimpleLineSymbolClass();//设置线符号的颜色pLineSymbol.Color
=pRgbColor;//设置先符号的类型pLineSymbol.Style=esriSimpleLineStyle.esriSLSDashDotDot;//设置线符号的宽度pLineSymbol.Width=1;3)FillSymbol类及其子类面要素的符号化通过FillSymbol类来完成,它是一个抽象类,有多个子类。FillSymbol类实现了IFillSymbol接口,这个接口定义了两个属性:Color和OutlineColor属性控制填充的颜色Outline属性设置填充符号的轮廓线,默认情况下,轮廓线是一个实心的SimpleLineSymbol,但用户可以使用任何类型的线型符号作为轮廓线3)FillSymbol类及其子类FillSymbol类的子类:SimpleFillSymbol(简单填充符号)LineFillSymbol(包含线型符号的填充符号)MarkerFillSymbol(包含点符号的填充符号)GradientFillSymbol(渐变填充符号)PictureFillSymbol(图片填充符号)MultiLayerFillSymbol(多符号叠加产生新填充符号)
3)FillSymbol类及其子类SimpleFillSymbolSimpleFillSymbol类实现简单填充符号,该类实现了ISimpleFillSymbol接口,其Style属性用于设置或返回填充格式。SimpleFillSymbol支持8种填充类型,存储在esriSimpleFillStyle常量集合中。3)FillSymbol类及其子类LineFillSymbol该类实现了ILineFillSymbol接口。接口的属性和方法如下图所示。3)FillSymbol类及其子类MarkerFillSymbol该类主要实现了IMarkerFillSymbol和IFillProperties这两个接口。IMarkerFillSymbol接口属性IFillProperties接口属性3)FillSymbol类及其子类GradientFillSymbolGradientFillSymbol类实现了用渐变色填充面要素,它实现了IGradientFillSymbol接口。3)FillSymbol类及其子类PictureFillSymbolPictureFillSymbol类实现了用图片填充面要素。其CreateFillSymbolFromFile方法用于设置填充图片的类型和来源,Outline属性用于设置面要素边线,Angle属性用于设置图片的显示方向。MultiLayerFillSymbol与MultiLayerLineSymbol类似,MultiLayerFillSymbol类实现了组合符号填充面要素,该类实现了IMultiLayerFillSymbol接口。SimpleFillSymbol填充代码示例IGeoFeatureLayerpGeoFeatLyr=pLayerasIGeoFeatureLayer;//设置面填充符号ISimpleFillSymbolpSimpleFillSymbol=newSimpleFillSymbolClass();pSimpleFillSymbol.Style=esriSimpleFillStyle.esriSFSVertical;//设置面填充为垂直线填充pSimpleFillSymbol.Color=GetRgbColor(150,150,150);//更改符号样式ISimpleRendererpSimpleRenderer=newSimpleRendererClass();pSimpleRenderer.Symbol=pSimpleFillSymbolasISymbol;pGeoFeatLyr.Renderer=pSimpleRendererasIFeatureRenderer;4)文本符号化
TextSymbol类是用于修饰文字元素的,文字元素在要素标注等方面很有用处TextSymbol类最重要的设置对象是它的字符,它实现了三个主要的接口来设置字符:ITextSymbol、ISimpleTextSymbol
和IFormattedTextSymbolITextSymbol接口是定义文本字符样式的主要接口,被ISimpleTextSymbol和IFormattedTextSymbol接口继承。Font属性是产生一个TextSymbol符号的关键。使用ITextSymbol接口还可以定义TextSymbol对象的颜色、角度、水平排列方式、垂直排列方式和文本等内容文本符号化代码示例//设置文本格式ITextSymbolpTextSymbol=newTextSymbolClass();StdFontmyFont=newstdole.StdFontClass();myFont.Name="宋体";myFont.Size=24;pTextSymbol.Font=(IFontDisp)myFont;pTextSymbol.Angle=0;pTextSymbol.RightToLeft=false;//文本由左向右排列pTextSymbol.VerticalAlignment=esriTextVerticalAlignment.esriTVABaseline;//垂直方向基线对齐pTextSymbol.HorizontalAlignment=esriTextHorizontalAlignment.esriTHAFull;//文本两端对齐pTextSymbol.Text=TextBox.Text;ITextElementpTextElement=newTextElementClass();pTextElement.Symbol=pTextSymbol;pTextElement.Text=pTextSymbol.Text;5)符号选择器在ArcGIS中可以使用符号选择器和样式管理器来设置更复杂和更具有行业特征的符号。控件Name属性Text属性其它SymbologyControlaxSymbologyControl
PictureBoxptbPreview
LabellblColor颜色
LabellblSize大小
LabellblWidth线宽
LabellblAngle角度
LabellblOutlineColor外框颜色
NumericUpDownnudSize
NumericUpDownnudWidth
NumericUpDownnudAngle
ButtonbtnColor
ButtonbtnOutlineColor
ButtonbtnMoreSymbols更多符号
ButtonbtnOK确定DialogResult属性设为OKButtonbtnCancel取消
ColorDialogcolorDialog
OpenFileDialogopenFileDialog
Filter属性设置为:ServerStyle文件文件|*.ServerStyleContextMenuStripcontextMenuStripMoreSymbol
控件名称及其属性符号选择器代码示例
if(e.button==1){if(itemType==esriTOCControlItem.esriTOCControlItemLegendClass){//取得图例ILegendClasspLegendClass=((ILegendGroup)unk).get_Class((int)data);//创建符号选择器SymbolSelector实例SymbolSelectorFrmSymbolSelectorFrm=newSymbolSelectorFrm(pLegendClass,layer);if(SymbolSelectorFrm.ShowDialog()==DialogResult.OK){//局部更新主Map控件m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);//设置新的符号pLegendClass.Symbol=SymbolSelectorFrm.pSymbol;//更新主Map控件和图层控件this.axMapControl1.ActiveView.Refresh();this.axTOCControl1.Refresh();}}3.地图标注
地图标注是表示制图对象的名称、数量与质量特征的文字和数字等文字语言,用于说明制图对象的名称、种类、性质和数量等具体特征,不仅可以弥补地图符号的不足,丰富地图的内容,而且在某种程度上还可以起到符号的作用。ArcGISEngine中提供了两种使用文字信息标注地图要素的方式:标注和注记。1)TextElement标注TextElement标注类似于ArcGIS中的“标注”功能,即将地理实体的某个属性值添加到地图上。实现思路:利用IFeatureCursor获取并遍历要素;利用IFeature的get_Value方法获取并遍历要素的属性值,将其以文本形式赋值给ITextElement的Text属性;将文字以Element的形式加入地图容器中。标注代码示例//产生一个文本符号ITextSymbolpTextSymbol=newTextSymbolClass();//设置文本符号的大小pTextSymbol.Size=20;pTextSymbol.Font=pFont;pTextSymbol.Color=m_OperateMap.GetRgbColor(255,0,0);//产生一个文本对象ITextElementpTextElement=newTextElementClass();pTextElement.Text=pFeature.get_Value(index).ToString();pTextElement.ScaleText=true;//标注随着地图放大缩小而变化pTextElement.Symbol=pTextSymbol;IElementpElement=pTextElementasIElement;pElement.Geometry=pPoint;IActiveViewpActiveView=pMapasIActiveView;IGraphicsContainerpGraphicsContainer=pMapasIGraphicsContainer;//添加元素pGraphicsContainer.AddElement(pElement,0);2)Annotation注记在ArcGISEngine中,注记以更复杂的方法和属性对要素图层进行标注。实现Annotation注记涉及到IAnnotateLayerPropertiesCollection、IAnnotateLayerProperties、ILabelEngineLayerProperties等接口。2)Annotation注记AnnotateLayerPropertiesCollection是一个要素图层的属性,可由IGeoFeaturelayer的AnnotationProperties属性获取,它是标注对象集的集合,此集合内可以放置多个不同的LabelEngineLayerProperties(标注对象),LabelEngineLayerProperties是与某个要素图层关联的,用于描述要素图层的标注,LabelEngineLayerProperties类实现了ILabelEngineLayerProperties接口,其Expression属性用于通过VBScript或Jscript表达式设置或格式化标注字段,BasicOverposterLayerProperties属性用于设置或返回标注的位置,并有处理标注冲突的功能,Symbol属性用于设置或返回标注字体的格式。注记代码示例IGeoFeatureLayerpGeoFeatLyer=pFeatLyrasIGeoFeatureLayer;IAnnotateLayerPropertiesCollectionpAnnoProps=pGeoFeatLyer.AnnotationProperties;pAnnoProps.Clear();//设置标注记体格式ITextSymbolpTextSymbol=newTextSymbolClass();stdole.StdFontpFont=newstdole.StdFontClass();pFont.Name="verdana";pFont.Size=10;pTextSymbol.Font=pFontasstdole.IFontDisp;//设置注记放置格式ILineLabelPositionpPosition=newLineLabelPositionClass();pPosition.Parallel=false;pPosition.Perpendicular=true;ILineLabelPlacementPrioritiespPlacement=newLineLabelPlacementPrioritiesClass();注记代码示例IBasicOverposterLayerPropertiespBasic=newBasicOverposterLayerPropertiesClass();pBasic.FeatureType=esriBasicOverposterFeatureType.esriOverposterPolyline;pBasic.LineLabelPlacementPriorities=pPlacement;//设置标注文本摆设路径权重pBasic.LineLabelPosition=pPosition;//控制文本的排放位置ILabelEngineLayerPropertiespLableEngine=newLabelEngineLayerPropertiesClass();pLableEngine.Symbol=pTextSymbol;pLableEngine.BasicOverposterLayerProperties=pBasic;//设置标注文本的放置方式,以及处理文字间冲突的处理方式等pLableEngine.Expression="["+sFieldName+"]";//输入VBScript或JavaScript语言,设置要标注的字段IAnnotateLayerPropertiespAnnoLayerProps=pLableEngineasIAnnotateLayerProperties;pAnnoProps.Add(pAnnoLayerProps);3)MapTips显示MapTips是一种与地图数据交互的访问方式,即当鼠标停留在某一要素上时,就可以查看该要素的某一属性值,具体显示的哪一个字段的值,由该图层的主显示字段决定。实例程序实现思路如下:获取要素图层;设置该图层要显示的属性字段;设置AxMapControl的ShowMapTips属性。MapTips代码示例ILayerpLayer=newFeatureLayerClass();pLayer=pFeatLyr;pLayer.ShowTips=true;ILayerFieldspLayerFields=(ILayerFields)pFeatLyr;for(inti=0;i<=pLayerFields.FieldCount-1;i++){IFieldfield=pLayerFields.get_Field(i);if(field.Name==sFieldName){pFeatLyr.DisplayField=field.Name;break;}}mainMapControl.ShowMapTips=true;二、专题地图制作1.单一符号化2.唯一值符号化3.唯一值多字段符号化4.分级色彩符号化5.分级符号化6.比例符号化7.点密度符号化8.统计图表符号化9.双值符号化10.多比例尺符号化1.单一符号化单一符号化就是采用大小、形状和颜色都统一的点状、线状或面状符号来表示某一个图层。这种符号设置方法忽略了要素在数量与质量等方面的差异,只能反映制图要素的地理位置。然而正是这种特点使其在表达制图要素的地理位置方面具有一定的优势。单一符号化的实现与点、线、面简单符号化类似。2.唯一值符号化唯一值符号化是根据要素属性值来设置地图符号的,它将具有相同属性值的地理要素赋予相同的符号,并用符号来区分不同的属性值。这种表示方法能够反映出地图要素的数量或者质量的差异。唯一值符号化由UniqueValueRenderer类实现,该类实现了IUniqueValueRenderer接口。其FieldCount属性用于设置或返回渲染字段的个数(0-3个),唯一值符号化的时候,它的值为1。2.唯一值符号化实例程序实现思路如下:(1)获取渲染字段的属性值;(2)生成一组与之对应的填充样式,通过IUniqueValueRender接口的AddValue方法,使不同的属性值和填充样式关联;(3)由IGeoFeatureLayer接口的Render方法完成渲染。唯一值单字段符号化代码示例定义一个色带查询要渲染的字段获取渲染字段的值并为每个值附上颜色唯一值单字段符号化代码示例面线点3.唯一值多字段符号化唯一值多字段符号化与单字段唯一值符号化的实现类似,不同之处是需要设置IUniqueValueRenderer接口的FieldDelimiter属性,它的作用是将多个组合字段的属性值分开。除此之外,IUniqueValueRenderer接口的AddValue方法的参数也不同,在唯一值多字段符号化中AddValue需添加的参数为不同属性字段的组合值、字段与其对应的符号。4.分级色彩符号化
分级色彩符号化是将要素属性值按照一定的分级方法分成若干级别,再用不同的颜色来表示不同级别。每个级别表示数值的一个范围,从而可以明确地反映制图要素的数量差异。色彩选择和分级方案是分级色彩表示法中的重要环节,只有合理的配色方案和科学的分级方法才能将地理现象的分布规律体现得清晰明确。这种方法多用于人口密度分布图、粮食产量分布图等。分级符号化代码示例5.分级符号化
分级符号和分级色彩类似,都是由IClassBreakRenderer接口下的ClassBreakRenderer类实现。不同的是分级色彩根据不同的值赋予不同的颜色,而分级符号是根据不同的值赋予大小不同的符号。6.比例符号化在ArcGISEngine中,比例符号是由ProportionalSymbolRenderer类实现,该类实现了IProportionalSymbolRenderer接口。其Field属性用于设置或返回渲染字段,MaxDataValue、MinDataValuel属性分别用于设置渲染中的最大值和最小值,一般我们设为渲染字段的最大值和最小值,MinSymbol属性用于设置或返回最小值对应的符号。分级符号化代码示例7.点密度符号化
点密度符号化是指根据制图要素属性值的大小,用随机分布的一定数量且大小相同的点来表示,属性值越大则表明该区域的点越多,属性越小则表明该地区的点越少,它是一种用点的密度来表达要素空间分布的方法。点密度由DotDensityRenderer类实现的,该类主要实现了IDotDensityRenderer和IRendererFields这两个接口。IRendererFields的AddField方法用来添加渲染字段;IDotDensityRenderer的DotDensitySymbol属性用来设置或返回点的样式,而DotDensitySymbol由DotDensityFillSymbol类实现;DotValue属性用来设置每个点所代表的值。需要注意的是点密度只能用于面状要素图层。8.统计图表符号化常用的统计图表类型有:饼图、条形图、柱状图、堆叠图等。在ArcGISEngine中,它们都是由ChartRenderer类实现的,该类实现了IChartRenderer接口。9.双值符号化双值符号化是综合使用唯一值符号化和分级符号化这两种符号化方法来渲染地图,使地图既能表现出唯一值符号渲染的特征,又能表现出分级渲染的特征。双值符号化由BiUniqueValueRenderer类实现,该类实现了IBivariateRenderer接口。其MainRenderer属性用设置或返回主渲染方法,该方法必须为唯一值渲染;VariationRenderer属性用于设置或返回二元渲染,该方法必须是分级渲染。9.双值符号化实例程序实现思路如下:(1)设置唯一值渲染;(2)设置分级渲染,并分别将其赋值给MainRenderer和VariationRenderer属性。10.多比例尺符号化在ArcGISEngine中,多比例尺渲染由ScaleDependentRenderer类实现,该类实现了IScaleDependentRenderer接口。其AddRenderer方法用于向渲染列表末尾添加一个新的渲染值;set_Break方法用于设置指定比例尺下的渲染方法,如IScaleDependentRenderer.set_Break(0,10000),IScaleDependentRenderer.set_Break(1,20000),所表达的意思为当比例尺分母≤10000时,地图显示为AddRenderer方法第一个添加的渲染方式,当比例尺分母大于10000且小于等于20000时,地图显示为AddRenderer方法第二个添加的渲染方式,依此类推。10.多比例尺符号化实例程序实现思路如下:(1)设置不同的渲染方式;(2)用AddRenderer方法添加渲染方式;(3)用set_Break方法设置不同比例尺下显示的不同渲染方式。三、地图整饰与输出5.5地图整饰一幅完整的地图,不仅有地理数据的符号化显示,还要有比例尺、指北针、图例等制图要素的整饰,这些整饰要素都属于MapSurround对象。MapSurround是由MapSurroundFrame管理的。添加图例添加图例主要由LegendItem和Legend两个类实现,它们分别实现了ILegendItem和ILegend接口。LegendItem类是一个抽象类,它有四个子类:HorizontalBarLegendItem、HorizontalLegendItem、NestedLegendItem和VerticalLegendItem,它们分别对应不同类型的图例。5.5地图整饰基本思路如下:(1)用IGraphicsContainer接口的FindFrame方法获取一个MapFrame对象;(2)由IMapFrame接口的CreateSurroundFrame方法获取一个MapSurroundFrame对象,并设置MapSurroundFrame的背景,背景设置由ISymbolBackground接口实现;(3)遍历所有图层,设置ILegendItem接口的Layer属性关联的图层,并通过ILegend接口的AddItem方法将LegendItem添加到ILegend中;(4)将生成的图例添加到PageLayoutControl中。5.5地图整饰添加指北针指北针在地图中用于指示地图哪个方向朝北。在ArcGISEngine中,指北针由MarkerNorthArrow类实现,该类主要实现了IMarkerNorthArrow和InorthArrow这两个接口。INorthArrow接口用于设置指北针对象的一般属性,如颜色、尺寸和位置等;IMarkerNorthArrow接口定义了一个MarkSymbol属性,用于设置或返回指北针的符号类型。实例程序实现思路如下:(1)利用SymbologyControl的LoadStyleFile方法将符号库载入到SymbologyControl控件中;(2)选择适合的指北针,将选择的符号添加到PageLayout控件中。5.5地图整饰添加指北针5.5地图整饰添加比例尺比例尺表示地图上的单位长度代表着现实世界的实际长度,它是地图制图的重要组成部分,由ScaleBar类实现。ScaleBar类也是一种MapSurround对象,它有多个子类,如ScaleLine、AlternatingScaleBar、DoubleAlternatingScaleBar和HollowScalbar等,这些类都实现了IScaleBar和IScaleMarks这两个接口。5.5地图整饰添加比例尺5.5地图整饰添加地图格网ArcGISEngine中添加地图格网使用MapGrid对象,MapGrid对象作为MapFrame对象的一种,必须出现在Pagelayout视图中。Mapgrid对象主要由GridLine(格网线)、GridLabel(格网标注)、GridBorder(格网边框)三部分组成。地图格网组成5.5地图整饰1)地图格网分类MapGrid有五个子类,分别是MeasuredGrid、IndexGrid、MgrsGrid、Graticule和CustomOverlayGrid,不同的子类可以生成不同类型的格网。Graticule类使用经纬线来划分地图,它主要实现了IGraticule和IMeasuredGrid这两个接口。MeasuredGrid与Graticule类似,都是使用经纬度作为地图格网来划分地图,不同的是它的空间参考属性可以与MapFrame对象一致,也可以不一致。IndexGrid接口使用索引值的方式来划分地图区域,适合小区域内地块的划分。IndexGrid类实现了IIndexGrid接口。CustomOverlayGrid是用户自定义的格网对象。5.5地图整饰2)添加地图格网下面以添加Graticule、MeasuredGrid和IndexGrid格网为例,说明如何在PageLayoutControl控件中添加地图格网。添加Graticule格网实例程序实现思路如下:(1)由IGraticule设置格网的边框、网格线、标注等格式;(2)由IMeasuredGrid设置格网的空间参考、起始点和格网间隔等;(3)将格网添加到地图上。添加经纬网添加经纬网5.5地图整饰2)添加MeasuredGrid格网实例程序实现思路如下:(1)由IMeasuredGrid设置格网基本属性,如是否自动设置起始点、经纬度间隔、格网标注格式等;(2)将格网添加到地图上。添加方里格网5.5地图整饰3)添加IndexGrid格网添加参考格网5.6制图模板模板是ArcMap中的一种地图文档,用于快速创建新地图。模板包含数据、自定义界面以及用于在虚拟页面上排列地图元素(如指北针、比例尺等)的预定义布局。制图模板以*.mxt为文件扩展名,这与*.mxd不同(地图文档)。本节实例主要实现加载系统自带地图模板与自定义地图模板、预览模板显示效果、选择合适的模板应用到当前地图中等功能。实例程序实现的主要思路如下:(1)读取模板文件,在TreeView中生成以模板名称命名的节点,单击节点,获取节点名称所对应的地图模板路径,在PageLayoutControl控件中预览,如合适,单击确定;(2)删除原有地图中除MapFrame外的所有元素并遍历新模板的要素,将其添加到地图上。预览模板显示如图5.31所示,其中“Custorm”下模板表示自定义模板,其余表示系统自带模板。5.6制图模板5.7空间参考在ArcGISEngine中,管理空间参考框架的是SpatialReference类,它实现了ISpatialReference接口。SpatialReference是一个抽象类,该类被GeographicCoordinateSystem、ProjectedCoordinateSystem、UnknownCoordinateSystem所继承。GeographicCoordinateSystem类主要实现了IGeographicCoordinateSystem和IGeographicCoordinateSystemEdit这两个接口。ProjectedCoordinateSystem类主要实现了IProjectedCoordinateSystem和IProjectedCoordinateSystemEdit这两个接口。在ArcGISEngine中有关坐标系定义还常用到SpatialReferenceEnvironment类,该类实现了ISp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南京航空航天大学《电动力学》2022-2023学年期末试卷
- 南京工业大学浦江学院《信号与系统》2021-2022学年第一学期期末试卷
- 南京工业大学浦江学院《设计语义与风格》2021-2022学年第一学期期末试卷
- 分数初步认识的说课稿
- 渠涵施工组织设计
- 《元次方程应用》说课稿
- 《下雨啦》说课稿
- 南京工业大学浦江学院《发动机原理》2023-2024学年第一学期期末试卷
- 租船合同范本(2篇)
- 纹身免责协议书(2篇)
- 2024年山东青岛城投金融控股集团有限公司招聘笔试参考题库含答案解析
- 工业机器人应用4-装配
- 中医外治治疗风湿病
- 美国实时总统大选报告
- 外贸业务与国际市场培训课件
- 信创医疗工作总结
- 教师教育教学质量提升方案
- 灭火器的规格与使用培训
- 2024《中央企业安全生产治本攻坚三年行动方案(2024-2026年)》
- 纪录片《园林》解说词
- 《民间文学导论》课件
评论
0/150
提交评论