ArcGIS Engine开发教程之图层符号化(三)——符号化Symbol(符号)体系

来源:互联网 发布:数据恢复后照片打不开 编辑:程序博客网 时间:2024/04/27 22:13
ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号)、 LineSymbol(线符号)和FillSymbol(填充符号)来绘制地理要素的几何图形。此外还有两种特殊类型的符号:一种是TextSymbol用于文字标注;另一种是3D Chart符号,用于显示饼图等三维对象,如需详细了解请查找帮助文档。

1.MarkerSymbol对象
MarkerSymbol用于修饰点对象的符号,它拥有十三个子类如表2所示,其中不同的子类可以产生不同类型的点符号。所有的MarkerSymbol类都实现了IMarkerSymbol接口,这个接口定义了标记符号的公共方法和属性,如角度、颜色、大小和X,Y偏移量等。

表二

点符号类型
描述
ArrowMarkerSymbol
预定义的肩头符号
BarChartSymbol
柱状图符号
CharacterMarker3DSymbol
三维字体符号
CharacterMarkerSymbol
字体符号
Marker3DSymbol
3D 符号
MultiLayerMarkerSymbol
多个符号叠加产生新点符号
PictureMarkerSymbol
图片符号(bmp或emf)
PiechartSymbol
饼图符号
SimpleMarker3DSymbol
简单3D符号
SimpleMarkerSymbol
简单符号
StackedChartSymbol
堆叠符号
TextMarkerSymbol
文字符号用来符号化点

常用的有以下5种 类型:

图5

如何创建MarkerSymbol?接下来以SimpleMarkerSymbol构建为例演示如何创建一个点符号:

//创建SimpleMarkerSymbolClass对象

ISimpleMarkerSymbol pSimpleMarkerSymbol =newSimpleMarkerSymbolClass();

//创建RgbColorClass对象为pSimpleMarkerSymbol设置颜色

IRgbColor pRgbColor =newRgbColorClass();

pRgbColor.Red = 255;

pSimpleMarkerSymbol.Color = pRgbColorasIColor;

//设置pSimpleMarkerSymbol对象的符号类型,选择钻石

pSimpleMarkerSymbol.Style =esriSimpleMarkerStyle.esriSMSDiamond;

//设置pSimpleMarkerSymbol对象大小,设置为5

pSimpleMarkerSymbol.Size = 5;

//显示外框线

pSimpleMarkerSymbol.Outline =true;

//为外框线设置颜色

IRgbColor pLineRgbColor =newRgbColorClass();

pLineRgbColor.Green = 255;

pSimpleMarkerSymbol.OutlineColor = pLineRgbColorasIColor;

//设置外框线的宽度

pSimpleMarkerSymbol.OutlineSize = 1;

如何使用这个符号,在接下来介绍Renderer对象的时候将为大家演示如何用创建的点符号去符号化一个图层。

2.LineSymbol对象

LineSymbol对象是用于修饰线型几何对象的符号,它拥有八个子类如表3所示,其中不同的子类可以产生不同类型的线符号,所有的LineSymbol类都实现了ILineSymbol接口, ILineSymbol定义了两个公共属性:Color和Width。

表三

线符号类型
描述
CartographicLineSymbol
实心或者虚线线符号
HashLineSymbol
离散线符号
MarkerLineSymbol
点线符号
MultiLayerLineSymbol
多符号叠加产生新线符号
PictureLineSymbol
图片线符号
SimpleLine3DSymbol
3D 线符号
SimpleLineSymbol
预定义风格的线符号
TextureLineSymbol (3DAnalyst)
纹理贴 图线符号

常用的LineSymbol如下图所示:
图6
如何创建LineSymbol?接下来以MarkerLineSymbol构建为例演示如何创建一个线符号:

IArrowMarkerSymbol pArrowMarker =newArrowMarkerSymbolClass();

IRgbColor pRgbColor =newRgbColorClass();

pRgbColor.Red = 255;

pArrowMarker.Color = pRgbColor asIColor;

pArrowMarker.Length = 10;

pArrowMarker.Width = 8;

pArrowMarker.Style =esriArrowMarkerStyle.esriAMSPlain;

IMarkerLineSymbol pMarkerLine =newMarkerLineSymbolClass();

pMarkerLine.MarkerSymbol = arrowMarker;

IRgbColor pLineColor =newRgbColorClass();

pLineColor.Blue = 255;

pMarkerLine.Color = pLineColorasIColor;


3.FillSymbol对象

FillSymbol是用来修饰如多边形等具有面积的几何形体的符号对象,它拥有十一个子类如表4所示它实现了IFillSymbol,这个接口定义了两个属性Color和OutLine,以满足所有类型的FillSymbol对象的公共属性设置。

表四

填充符号类型
描述
ColorRampSymbol (Carto)
用于渲染Raster数据的颜色带
ColorSymbol (Carto)
用于渲染Raster数据的颜色符号
DotDensityFillSymbol
点密度填充符号
GradientFillSymbol
渐变填充符号
LineFillSymbol
包含线符号的填充符号
MarkerFillSymbol
包含点符号的填充符号
MultiLayerFillSymbol
多符号叠加产生新填充符号
PictureFillSymbol
图片填充符号
RasterRGBSymbol
用于渲染Raster数据 RGBSymbol
SimpleFillSymbol
简单填充符号
TextureFillSymbol
纹理贴图填充符号
常用的FillSymbol如下图所示:
图7
如何创建FillSymbol?接下来以MarkerLineSymbol构建为例演示如何创建一个线符号:
//为填充符号创建外框线符号

IColor pLineColor =newRgbColorClass();

ICartographicLineSymbol pCartoLineSymbol =newCartographicLineSymbolClass();

pCartoLineSymbol.Width = 2;

pCartoLineSymbol.Color = pLineColor;

//创建一个填充符号

ISimpleFillSymbol pSmplFillSymbol =newSimpleFillSymbol();

//设置填充符号的属性

IColor pRgbClr =newRgbColorClass();

IFillSymbol pFillSymbol = pSmplFillSymbol;

pFillSymbol.Color = pRgbClr;

pFillSymbol.Outline = pCartoLineSymbol;
    如果没有ArcGIS Desktop使用经验的开发看了以上代码片段会一头雾水,不明白填充符号的创建为什么还要创建线符号等等,如果有ArcGIS Desktop使用经验就会非常容易理解这些符号的创建的机制,如图8是SimpleFillSymbol设置信息。所以熟悉ArcGIS Desktop的使用对开发人员进行ArcGIS Engine开发非常有用。

图8

4.TextSymbol对象
    TextSymbol对象是用于修饰文字元素的,文字元素在要素标注等方面很有用处。TextSymbol符号最重要的设置对象是它的字符,它实现了三个主要的接口来设置字符:ITextSymbol 、 ISimpleTextSymbol 和 IFormattedTextSymbol 。
    ITextSymbol接口是定义文本字符样式的主要接口,它定义的ITextSymbol::Font属性是产生一个TextSymbol符号的关键。可以使用IFontDisp接口来设置字体的大小和是否是粗体、倾斜等属性。使用ITextSymbol接口还可以定义TextSymbol对象的颜色、角度、水平排列方式、垂直排列方式和文本等内容。
    以下是一个构建TextSymbol的函数:

///生成文本符号

publicstaticvoid MakeTextSymbol(ref ITextSymbol pTxtSymbol,string sFontName,int iFont, int iColor)

{

try

{

pTxtSymbol.Font.Name = sFontName;

pTxtSymbol.Font.Size = (decimal)iFont;

IRgbColor pRGBColor = new RgbColorClass();

pRGBColor.RGB = iColor;

pTxtSymbol.Color = (IColor)pRGBColor;

pTxtSymbol.Angle = 0;

pTxtSymbol.RightToLeft = false;

pTxtSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;

pTxtSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;

}

catch (Exception Err)

{

MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

}

}


5. 3DChartSymbol对象

    3DChartSymbol是一个抽象类,它拥有三个子类:BarChart、PieChart和StackedChart。如图9所示:
          

图9

    BarChartSymbol是最常用的三维着色符号,它使用不同类型的柱子来代表一个要素类中不同的属性,而柱子的高度取决于属性值的大小。
    PieChartSymbol符号进行着色的方法是使用一个饼图来显示不同要素类中的不同属性,不同的属性按照它们的数值大小占有一个饼图中的不同比例的扇形区域。
    PieChartSymbol符号进行着色的方法是使用一个饼图来显示不同要素类中的不同属性,不同的属性按照它们的数值大小占有一个饼图中的不同比例的扇形区域。

    至于如何创建这些3DChartSymbol符号这里不再提供代码片段演示,读者可以根据前边学习的知识,自己操作ArcGIS Desktop使用3DChartSymbol制作专题图,然后根据ArcGIS Engine的帮助文档开发创建3DChartSymbol。


6.使用ServerStyle6.

如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系如图10所示。可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。
用于获取ServerStyle符号库中的符号主要涉及到以下接口如表所示:

接口名称功能描述IStyleGallery用于管理Style GalleryIStyleGalleryStorage管理Style Gallery中的符号库文件IStyleGalleryClass控制符号库中Style Gallery ClassIEnumStyleGalleryItem枚举一组Style Gallery itemsIStyleGalleryItem定义Style Galle ry itme

10

(1)获取符号库中符号
如何获取到一个符号库中符号?接下来以获取ESRI符号库中名称为Rose的符号的流程:
1.首先构建一个ServerStyleGallery对象
2.其次使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件
3.遍历ServerGallery中的Class,如果是FillSymbol使用IStyleGallery的GetItems方法返回一个可枚举的包含一系列StyleGalleryItem的EnumStyleGalleryItem对象。
4.遍历EnumServerStyleGalleryItme枚举对象中的StylegalleryItme如果名称是Rose即可获取ESRI符号库中名称为Rose的StylegalleryItme,然后通过IStyleGalleryItem的Item属性即可转换为ISymbol。

整个流程图如图11所示:


11

7.SymbologyControl控件
SymbologyControl用来显示ServerStyle符号库中的符号样式,可以选择在该控件上选择一个符号用来符号化一个图层或者作为一个Element的符号。使用SymbologyControl可以再设计的模式下在其属性页中加载ServerStyle符号库文件,同样也可以使用的LoadStyleFile和RemoveFile方法加载和移除Serverstyle符号库文件。运行效果如图12所示:

12

原创粉丝点击