ArcGIS Engine中的Symbols详解

简介: 本文由本人翻译ESRI官方帮助文档。尊重劳动成果,转载请注明来源。Symbols    ArcObjects用了三种类型的Symbol(符号样式)来绘制图形特征:marker symbols(标记符号),line symbols(线符号),和fill symbols(填充符号)。

本文由本人翻译ESRI官方帮助文档。尊重劳动成果,转载请注明来源。

Symbols

    ArcObjects用了三种类型的Symbol(符号样式)来绘制图形特征:marker symbols(标记符号),line symbols(线符号),和fill symbols(填充符号)。这些样式同样可以用来绘制elements(元素)图形,比如在地图或制版视图上的图表边线和指北针箭头。第四个样式text symbol(文字符号)是用来绘制标注和其他文本要素的。第五个样式3D chart symbol(图表样式)是用来绘制图表的。在图形元素设置的实例中,一种样式被作为属性赋给所有的元素。图层然而由一个包含一个或多个样式的结合进行绘制。样式(符号)的大小总是指定到一些点上(比如线的宽度),但是几何形状(如线的路径)的大小是由它们本身来决定绘制的。多数情况下,当对象被创建时就已经有了一个默认的样式,因此省去了创建新样式赋给每一个对象的过程,你可以修改一个已经存在的样式。另外一种方式获取样式的方式是用样式文件。ArcObject使用样式文件,可分发数据库存储和访问样式和颜色。有许标准样式,提供了上千种预定义的可用的样式,在安装路径下。利用StyleGallery和StyleGalleryItem两个类,你可以弥补和修改现存的符号样式,这可以使得比重新绘制和创建更高效。你同样可以使用ArcMap的标准样式编辑器,它可以在程序里面使用SymbolEditor类打开。下面的小节将描述怎样利用第一个规则创建一个复杂的符号样式。ISymbol接口提供了对所有符号样式的高等级功能,它允许你使用设置直接绘制一个符号样式。

       更多的附加信息,参见Creating custom symbols

Symbol level drawing

       你可以使用符号等级绘图功能改变图层对象的绘制顺序。在使用符号等级绘制时,你可以控制到是元素按照最基础的一个个样式顺序绘制。这将意味着元素不一定需要以与图层出现在ArcMap表的内容中相同的顺序绘制。使用符号等级绘制,你可以控制一个含控制器绘制元素符号绘制元素的绘制。更多的是,当使用多个样式符号时,你可以控制单个符号层的绘制顺序。

       符号等级绘制在地图套管中最有用。因为它能被用来创建天桥和和地下通道,当线对象有穿过状态时,它是一个非常好的方式展现连接状态。符号等级绘制能够用来更好地表达其他更多的影响和状况。

Join and merge

       下面的图形展示了一个合并样式的效果,它使得对象拥有一致的样式相互连接起来。合并使得有不同样式的对象连接显示。这些变化在使用符号等级对象和接口后场景显示在后台自动实现效果。你可以使用,相对于图层的ISymbolLevels.UseSymbolLevels或相对整个地图的IMp.UserSymbolLevels接口,来切换符号等级绘制的开关。

       使用了地图等级符号绘制的两个示例:


       更多信息,参见:How to use symbol level drawing


Marker symbols

       下面的图表展示的是标记符号样式的类结构:

       IMarkerSymbol接口提供了标记样式共同拥有的一些属性:Angle,Color,Size,XOffset,和YOffset。IMarkerSymbol是所有标记样式的原始接口。所有的其他标记接口都继承IMarkerSymbol的属性和方法。这个接口有5个可读可写属性,它们允许你在任何标记样式类中获取和设置基础的属性。Color属性能够被任何IColor类型的对象设置,它的具体影响基于你使用的类型。
       标记样式类的颜色属性设置属性表如下:

       Size属性设置符号整体的高度,包含SimpleMarkerSymbol,CharacterMarkerSymbol,PictureMarkerSymbol和MultiLayerMarkerSymbol类型。对于ArrowMarkerSymbol类型,Size表示长度。基本单位是点。除了PictureMarkerSymbol的默认大小是12外,其他的默认的大小都是8。Angle属性设置角度,单位是度。符号是从水平方向开始向逆时针方向进行旋转。它的默认值是0。XOffset和YOffset属性定义样式绘制时离实际对象的偏移距离。两个属性都是在打印的点中,默认值是0,值可为正和负。负数表示相对于对象向下偏移和向右偏移,当然正数表示向上和向左偏移。Size、XOffset和YOffset在打印机点上1/71英寸大小。
       下面的图展示了一些标记样式:

       标记符号的旋转指定到数学表达中,下图展示了标记符号的旋转:

       下图展示了一些简单的标记样式:
       
       下图展示了一些箭头标记样式:
       
       下图展示了一些图表标记样式:
       
       下图展示了一些图片标记样式:
       
       下图展示了一些多层标记样式:
       
       更多信息,参见:

    How to make a character marker symbol     How to make a picture marker symbol


Line symbols

       线符号样式的的类视图如下图所示:

       LineSymbol接口拥有两个所有线样式共同拥有的属性:Color和Width。ILineSymbol是线样式共同的原始接口,将继承ILineSymbol所有的属性和方法。接口有两个可读可写属性,在所有的线样式类中允许对其获取和设置。Color属性控制基础线(它不是影响任何存在的装饰线条,请参阅ILineProperties接口)的颜色并且可有任何IColor类型的对象设置。颜色线条除了SimpleLineSymbol默认被设置成中灰色,其他的都默认是黑色。Width属性设置的是所有的线宽度,单位是点。对于HashLineSymbol,Width属性设置的是所有哈西的长度。除了MarkerLineSymbol的默认宽度为8外,所有的线符号的默认宽度都是1。
       线符号表示了一个对象或图形绘制的定义。Straight lines、polylines、curves和outlines都能用线符号进行绘制。下图展示了一些线符号:

       一个线符号被打印出来是1/72英寸。下图展示了一个线符号宽度的样例:

       更多信息,参见: How to make a cartographic line symbol

Fill symbols

       下图展示了填充符号的类结构视图:

       下图展示一些填充符号样式:

       IFillSymbol接口呈现了两个属性,Color和Outline,他们是所有填充符号类型都拥有的属性。
在ArcOjbects中,IFillSymbol被所有的更专业的填充样式类型所继承,有两个可读可写属性。Color属性控制这基本的填充,在下表所示,可以使用IColor类型进行设置。

       Outline属性在ILineSymbol中的设置,被绘制到填充的外边框。不同的填充符号表达了一个多边形的面积和边框如何绘制。默认的外边框线是一条SimpleLineSymbol实线,你也可以使用任何类型的线样式作为外边框线。外边框线的中线在对象的边沿上,所以,一个宽度为5的外框线将重叠填充符号可见的数量。

       更多信息,参见:

    How to make a line fill symbol     How to make a gradient fill symbol


Text symbols

       下图展示了文字符号样式的类视图:

       TextSymbol类提供了一种用来符号化图形元素中的文字、注记、标注等等。文字符号样式不仅仅只是定义了字体。主要接口ITextSymbol、ISimpleTextSymbol和IFormattedTextSymbol控制这文字怎样展现和单个字符的展现方式。TextSymbol支持扩展的ASCII码。
       更多信息,参见:

    Creating other kinds of custom symbols     How to make a line callout


Chart symbols

       3DChartSymbol是一个抽象的三种类型的图表符号。它代表了一种标记符号,可以使用ChartRenderer的多个属性来符号化地理数据。虽然它被普遍应用于ChartRenderer,如果所有属性都设置适当,你也可以使用符号作为标记符号符号化单个人对象或元素。
在图表符号中IChartSymbol被用来计算柱子和饼图片的大小。maximum属性值能被图表用来量算其他属性的值。在创建3DChartSymbol的时候该值总是被设置。当创建一个CharRenderer时,确保你的特征类已经统计完成,你可以统计统计功能设置MaxValue属性到maxmun属性值开始渲染。例如,加入有两个字段用一个图表来渲染,一个包含的值是从0至5,另一个包含的值是从0至10,设置最大值10。
       Value属性包含一组值,指示所有的柱状的的高度和宽度或饼的份额。假如你在CharRenderer中使用ChartSymbol,你不需要设置这个属性。这个值数组将在CharRenderer绘图的过程中,FeatureClass类使用从指定的属性字段的属性值,从每个功能创建一个稍微不同的符号进行重复填充。绘制完成后所有的值被设置成空或0。单独使用ChartRenderer时,在柱状和饼子图中设置你想要使用的数组值。
       更多信息,参见:

       Creating custom symbols

       Creating other kinds of custom symbols

       Sample: Triangle graphic element


相关文章
|
SQL 开发框架 数据可视化
ArcGIS Engine学习系列1 AE基础介绍
市面上AE教程大致到ArcGIS10.2,ESRI宣布从ArcGIS10.5开始便停止AE的更新,使用AO做开发,初学者可以在学习C#语言后,从AE入门,逐渐过度到AO。不同版本下AE数据类型数量Enums:枚举类型,用于实现一些定义的内容Structs:结构体Interfaces:接口Classes:类AE开发中,为了更好地管理COM对象,ESRI将这些COM对象放到不同的组件库中。
299 0
|
C++ 容器
Qt+ArcGIS Engine 10.1 开发(二)
ArcGIS Engine+Qt(GUI开发,使用Qt提供的方法) 上面的这种方法,因为不能调试,所以我相信你不会喜欢,其实我也不喜欢,那我们就用这种方式吧,这种方式不需要上面提到的dll,因此也不需要额外的配置。
965 0
|
定位技术 容器 索引
ArcGIS Engine Style文件操作
对于一个GISer来说,地图,符号这些都应该有着比别人更深刻的理解和认识,作为平台软件都会提供一套自己的符号库,符号库里面根据类别和种类进行区分,因为点,线,面的自然存在和固有属性是不肯能让你用面状符号去渲染点和线的,学GIS的人,一般都会有分类的意识。
1049 0
|
定位技术 C# C++
VC2010+ArcGIS Engine 10.1 开发(一)
                      使用MFC(VS2010)开发ArcGIS Engine 10.1 网上C#结合ArcGIS Engine的资料简直太多了,多的都无法形容,但是C++的却很少,前一段时间不断的有人问在VC中如何开发ArcGI...
1108 0
|
C# 定位技术
VC2010+ArcGIS Engine 10.1 开发(二)
采用ActiveX控件插入的方式 上面我们是通过代码直接将地图控件放到界面上,这种有一个不好的地方就是,如果我们要设置控件的一些样式和视觉效果,我们要自己写很多代码,在C#中我们就很容易,其实在VC中也可以采用这种方式,下来我介绍下: 插入控件 在Vi...
847 0
|
开发工具 C++ C语言
Qt+ArcGIS Engine 10.1 开发(一)
  Qt作为一个跨平台C++图形用户界面应用程序开发框架,相当于微软的MFC(只能运行在Windows平台上),Qt命运多舛,几经易主,现在属于芬兰IT服务公司Digia。 Qt环境安装 Qt的最新版本是Qt5.0,该版本是在12月中旬发布的,在这里我用的是Qt4.8。
1322 0
|
C++
ArcGIS Engine 10报错:ArcGIS version not specified...
        ArcGIS Engine 10桌面应用程序第一次开发,于是使用VS创建一个简单的AE应用程序,然后拖放一个toolbar、LicenseControl以及MapControl控件。
791 0
|
分布式数据库 数据库
ArcGIS Engine+分布式数据库操作
我们知道Geodatabase的分布式数据库可以在线也可以离线,而在线和离线的接口是不同的,这是因为两者的操作过程不一样,我们看一下两者的区别:                                                                             ...
755 0
ArcGIS Engine+拓扑操作
///  /// 建立拓扑 ///  /// 目标数据集 /// 拓扑名称  public void CreateTopology(IFeatureDataset featureDataset, string topologyName)  { // 建立一个空拓扑(拓扑名称、获得数据集的...
839 0
|
人工智能 数据可视化 API
ArcGIS API for Python
ArcGIS API for Python
71 0
下一篇
无影云桌面