符号化Symbol(符号)体系
符号化Symbol(符号)体系
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种 类型:
如何创建MarkerSymbol?接下来以SimpleMarkerSymbol构建为例演示如何创建一个点符号:
//创建SimpleMarkerSymbolClass对象
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
//创建RgbColorClass对象为pSimpleMarkerSymbol设置颜色
IRgbColor pRgbColor = new RgbColorClass();
pRgbColor.Red = 255;
pSimpleMarkerSymbol.Color = pRgbColor as IColor;
//设置pSimpleMarkerSymbol对象的符号类型,选择钻石
pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;
//设置pSimpleMarkerSymbol对象大小,设置为5
pSimpleMarkerSymbol.Size = 5;
//显示外框线
pSimpleMarkerSymbol.Outline = true;
//为外框线设置颜色
IRgbColor pLineRgbColor = new RgbColorClass();
pLineRgbColor.Green = 255;
pSimpleMarkerSymbol.OutlineColor = pLineRgbColor as IColor;
//设置外框线的宽度
pSimpleMarkerSymbol.OutlineSize = 1;
如何使用这个符号,在接下来介绍Renderer对象的时候将为大家演示如何用创建的点符号去符号化一个图层。
2. LineSymbol对象
LineSymbol对象是用于修饰线型几何对象的符号,它拥有八个子类如表3所示,其中不同的子类可以产生不同类型的线符号,所有的LineSymbol类都实现了ILineSymbol接口, ILineSymbol定义了两个公共属性:Color和Width。
表三
线符号类型 |
描述 |
CartographicLineSymbol |
实心或者虚线线符号 |
HashLineSymbol |
离散线符号 |
MarkerLineSymbol |
点线符号 |
MultiLayerLineSymbol |
多符号叠加产生新线符号 |
PictureLineSymbol |
图片线符号 |
SimpleLine3DSymbol |
3D 线符号 |
SimpleLineSymbol |
预定义风格的线符号 |
TextureLineSymbol (3DAnalyst) |
纹理贴 图线符号 |
常用的LineSymbol如下图所示:
符号化Symbol(符号)体系 ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号)、 LineSymbol(线符号)和FillSymbol(填充符号)来绘制地理要素的几何图形。此外还有两种特殊类型的符号:一种是TextSymbol用于文字标注;另一种是3D Chart符号,用于显示饼图等三维对象,如需详细了解请查找帮助文档。 1. MarkerSymbol对象 MarkerSymbol用于修饰点对象的符号,它拥有十三个子类如表2所示,其中不同的子类可以产生不同类型的点符号。所有的MarkerSymbol类都实现了IMarkerSymbol接口,这个接口定义了标记符号的公共方法和属性,如角度、颜色、大小和X,Y偏移量等 表二
常用的有以下5种 类型: 如何创建MarkerSymbol?接下来以SimpleMarkerSymbol构建为例演示如何创建一个点符号: //创建SimpleMarkerSymbolClass对象 ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass(); //创建RgbColorClass对象为pSimpleMarkerSymbol设置颜色 IRgbColor pRgbColor = new RgbColorClass(); //设置pSimpleMarkerSymbol对象的符号类型,选择钻石 //设置pSimpleMarkerSymbol对象大小,设置为5 //显示外框线 //为外框线设置颜色 IRgbColor pLineRgbColor = new RgbColorClass(); //设置外框线的宽度 pSimpleMarkerSymbol.OutlineSize = 1; 如何使用这个符号,在接下来介绍Renderer对象的时候将为大家演示如何用创建的点符号去符号化一个图层。 2. LineSymbol对象 LineSymbol对象是用于修饰线型几何对象的符号,它拥有八个子类如表3所示,其中不同的子类可以产生不同类型的线符号,所有的LineSymbol类都实现了ILineSymbol接口, ILineSymbol定义了两个公共属性:Color和Width。 表三
常用的LineSymbol如下图所示: 如何创建LineSymbol?接下来以MarkerLineSymbol构建为例演示如何创建一个线符号: IArrowMarkerSymbol pArrowMarker = new ArrowMarkerSymbolClass(); IRgbColor pRgbColor = new RgbColorClass(); IMarkerLineSymbol pMarkerLine = new MarkerLineSymbolClass(); IRgbColor pLineColor = new RgbColorClass(); 3. FillSymbol对象 FillSymbol是用来修饰如多边形等具有面积的几何形体的符号对象,它拥有十一个子类如表4所示它实现了IFillSymbol,这个接口定义了两个属性Color和OutLine,以满足所有类型的FillSymbol对象的公共属性设置。 表四
常用的FillSymbol如下图所示: 如何创建FillSymbol?接下来以MarkerLineSymbol构建为例演示如何创建一个线符号: //为填充符号创建外框线符号 IColor pLineColor = new RgbColorClass(); ICartographicLineSymbol pCartoLineSymbol = new CartographicLineSymbolClass(); pCartoLineSymbol.Width = 2; pCartoLineSymbol.Color = pLineColor; //创建一个填充符号 ISimpleFillSymbol pSmplFillSymbol = new SimpleFillSymbol(); //设置填充符号的属性 IColor pRgbClr = new RgbColorClass(); IFillSymbol pFillSymbol = pSmplFillSymbol; pFillSymbol.Color = pRgbClr; pFillSymbol.Outline = pCartoLineSymbol; 如果没有ArcGIS Desktop使用经验的开发看了以上代码片段会一头雾水,不明白填充符号的创建为什么还要创建线符号等等,如果有ArcGIS Desktop使用经验就会非常容易理解这些符号的创建的机制,如图8是SimpleFillSymbol设置信息。所以熟悉ArcGIS Desktop的使用对开发人员进行ArcGIS Engine开发非常有用。 4. TextSymbol对象 TextSymbol对象是用于修饰文字元素的,文字元素在要素标注等方面很有用处。TextSymbol符号最重要的设置对象是它的字符,它实现了三个主要的接口来设置字符:ITextSymbol 、 ISimpleTextSymbol 和 IFormattedTextSymbol 。 ITextSymbol接口是定义文本字符样式的主要接口,它定义的ITextSymbol::Font属性是产生一个TextSymbol符号的关键。可以使用IFontDisp接口来设置字体的大小和是否是粗体、倾斜等属性。使用ITextSymbol接口还可以定义TextSymbol对象的颜色、角度、水平排列方式、垂直排列方式和文本等内容。 以下是一个构建TextSymbol的函数: ///<summary> ///生成文本符号 ///</summary> ///<param name="pTxtSymbol">文本符号</param> ///<param name="sFontName">字体名称</param> ///<param name="iFont">字体大小</param> ///<param name="iColor">字体颜色</param> public static void MakeTextSymbol(ref ITextSymbol pTxtSymbol, string sFontName, int iFont, int iColor) { try 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。如下图所示: BarChartSymbol是最常用的三维着色符号,它使用不同类型的柱子来代表一个要素类中不同的属性,而柱子的高度取决于属性值的大小。 PieChartSymbol符号进行着色的方法是使用一个饼图来显示不同要素类中的不同属性,不同的属性按照它们的数值大小占有一个饼图中的不同比例的扇形区域。 PieChartSymbol符号进行着色的方法是使用一个饼图来显示不同要素类中的不同属性,不同的属性按照它们的数值大小占有一个饼图中的不同比例的扇形区域。 至于如何创建这些3DChartSymbol符号这里不再提供代码片段演示,读者可以根据前边学习的知识,自己操作ArcGIS Desktop使用3DChartSymbol制作专题图,然后根据ArcGIS Engine的帮助文档开发创建3DChartSymbol。 |
使用ServerStyle 如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系如下图所示。可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。 表
4.5.1获取符号库中符号 如何获取到一个符号库中符号?接下来以获取ESRI符号库中名称为Rose的符号的流程: 1.首先构建一个ServerStyleGallery对象 整个流程图如下图所示: SymbologyControl控件 SymbologyControl用来显示ServerStyle符号库中的符号样式,可以选择在该控件上选择一个符号用来符号化一个图层或者作为一个Element的符号。使用SymbologyControl可以再设计的模式下在其属性页中加载ServerStyle符号库文件,同样也可以使用的LoadStyleFile和RemoveFile方法加载和移除Serverstyle符号库文件。运行效果如下图所示: 符号化之Renderer( 渲染)体系 ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类。接下来分别介绍FeatureRender和RasterRender。 1. FeatureRender对象 FeatureRenderer是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IFeatureRenderer接口,这个接口定义了进行要素图层符号化的公共属性和方法。 可以通过IGeoFeatureLayer::Renderer属性获得一个要素图层的符号化对象 表四
常用的要素符号化类型主要有以下6种类型,如下图所示: 2. RasterRender对象 RasterRender是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IRasterRender接口,这个接口定义了栅格图层符号化的公共属性和方法。可以通过IRasterLayer::Renderer属性获得一个栅格图层的符号化对象。
栅格符号化类型结构图如下图所示: 以下代码片段是对一个RasterLayer进行RasterStretchColorRampRenderer符号化操作: ///<summary> /// StretchColorRamp符号化RasterLayer ///</summary> ///<param name="pRasterLayer">RasterLayer</param> public void SetStretchColorRampRenderer(IRasterLayer pRasterLayer) try //创建RasterStretchColorRampRendererClass对象 IRasterStretchColorRampRenderer pRStretchRender= new RasterStretchColorRampRendererClass(); //QI到IRasterRenderer IRasterRenderer pRasterRender=pRStretchRender as IRasterRenderer; pRasterRender.Update(); //创建两个起始颜色 IRgbColor pFromRgbColor = new RgbColorClass(); IRgbColor pToRgbColor = new RgbColorClass(); //创建起止颜色带 IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass(); bool btrue= true; //选择拉伸颜色带符号化的波段 //设置拉伸颜色带符号化所采用的颜色带 //符号化RasterLayer } catch(Exception Err) MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information); |
ArcGIS Engine开发 --图层符号化(四)
利用ESRI自带的符号库进行唯一值符号化一图层开发实例 实现唯一值符号化功能代码如下: ///<summary> ///获取符号库中符号 ///</summary> ///<param name="sServerStylePath">符号库全路径名称</param> ///<param name="sGalleryClassName">GalleryClass名称</param> ///<param name="symbolName">符号名称</param> ///<returns>符号</returns> private ISymbol GetSymbol(string sServerStylePath, string sGalleryClassName, string symbolName) try //ServerStyleGallery对象 IStyleGallery pStyleGaller = new ServerStyleGalleryClass(); IStyleGalleryStorage pStyleGalleryStorage = pStyleGaller as IStyleGalleryStorage; IEnumStyleGalleryItem pEnumSyleGalleryItem=null; IStyleGalleryItem pStyleGallerItem = null; IStyleGalleryClass pStyleGalleryClass = null; //使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件 pStyleGalleryStorage.AddFile(sServerStylePath); //遍历ServerGallery中的Class for (int i = 0; i < pStyleGaller.ClassCount; i++) if (pStyleGalleryClass.Name != sGalleryClassName) continue; //获取EnumStyleGalleryItem对象 //遍历pEnumSyleGalleryItem while (pStyleGallerItem != null) { //获取符号 ISymbol pSymbol = pStyleGallerItem.Item as ISymbol; } System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem); return null; catch (Exception Err) { MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return null; ///<summary> ///设置要素图层唯一值符号化 ///</summary> ///<param name="pFeatureLayer"></param> private void UniqueValueRenderFlyr(IFeatureLayer pFeatureLayer) { try //创建UniqueValueRendererClass对象 IUniqueValueRenderer pUVRender = new UniqueValueRendererClass(); List<string> pFieldValues= new List<string>(); for(int i=0;i<pFieldValues.Count;i++) ISymbol pSymbol= new SimpleMarkerSymbolClass(); //添加唯一值符号化字段值和相对应的符号 //设置唯一值符号化的字段个数和字段名 pUVRender.set_Field(0, "类别"); IGeoFeatureLayer pGFeatureLyr = pFeatureLayer as IGeoFeatureLayer; //设置IGeofeatureLayer的Renderer属性 catch (Exception Err) MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer; UniqueValueRenderFlyr(pFeatureLayer); this.axMapControl1.Refresh(); 设计GIS系统符号化模块 大家首先有个观念:用ArcEngine开发C/S应用程序时,一个成熟的GIS项目在加载数据这方面是不允许直接把SDE里边的数据以MXD的形式组织起来这是不科学的,原因如下: 1.从数据安全性考虑 一个MXD文档包含了SDE数据库里与MXD数据的详细信息,通常对于数据拥有者来说是不希望外部能够获取这些信息的。 2.从系统灵活性考虑 接下来我将从两种途径给大家介绍一下如果动态符号化图层: 使用ArcEngine开发C/S应用程序数据加载一个重要的功能模块,在数据加载模块符号图层是其技术核心之一: 1. 通过系统符号化配置表存储图层符号化信息符号化图层。 首先在关系型数据库中创建一个图层符号化配置表详细记录每一个图层的符号化信息,如下表(我只列出简单符号化的配置表设计,至于唯一值等大家可以自己根据需求设计):
然后使用ArcEngine提供的每种符号化类型的接口对图层进行符号化渲染。 2. 通过ArcEngine提供的Represatation存储要素符号化 Representation是ArcGIS9.3的新特性,能够通过Representation制作更精美,更复杂的地图操作过程,下图是ArcGIS Desktop中Repre sentation工具条。 通过一下操作可以把通过Representation工具条制作出来的地图效果存储在要素类中(只能是Geodat abase类型的)。 从以上可以看出每一个要素的符号化信息都以Blob方式存储在相对应的数据表中,这样就不需要通过配置表的设置进行动态符号化,直接通过Engine中提供的与Representation相关的接口和类符号化每一个图层。 |
符号化Symbol(符号)体系相关推荐
- 符号化Symbol(符号)体系(转载)
转自:http://blog.sina.com.cn/s/blog_4ce8fd7c0100h4lt.html ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号Marke ...
- 安装与配置windbg的symbol(符号)
本篇是新手自己写的一点心得.建议新手看看.同时希望前辈多多指教. 写这篇的动机:在网上找了一上午的windbg配置符号教程.楞是没找到详细的,都讲的太 模糊而且互相抄袭.不适合新手看.终于靠自己的努力 ...
- ES6的Class类和Symbol符号
class类 ES6的class可以看作只是一个语法糖,新的class写法只是让对象原型的写法更加清晰.更像面向对象编程的语法 class 函数名{ constructor(){ // 构造器 }// ...
- ArcEngine符号化——点符号
1.前言 在GIS系统的开发过程中,地图符号化其实是非常重要的一块内容.ArcEngine为我们提供了很多种符号样式,现在就来介绍一下ArcEngine中的点状符号. 2.常用的点符号 2.1.简单符 ...
- 【scala初学】scala symbol 符号 -3
前面接触了scala符号,这会整体性的说说. scala符号主要分为四类: 1. 关键字,保留字 (Keywords/reserved symbols) 2. 自动导入 (Automatically ...
- Day07 - Ruby比一比:Symbol符号与String字串
前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...
- Arcgis Engine 添加一个Symbol符号样式步骤
1 public static void DrawPictureMarkerSymbol(IGlobe globe, String layerName) 2 { 3 //添加一个图层 4 ESRI.A ...
- ArcEngine符号化——文本符号
1.前言 在ArcEngine中,文本符号主要用于设置IElement的样式,涉及到的接口为ITextSymbol,下面开始介绍. 2.实现代码 demo的主要功能为:在PageLayoutContr ...
- elf 取路径_利用libbfd获取elf可执行文件的section(节)及symbol(符号)信息
一. 安装bfd库 libbfd(Binary File Descriptor library是binutils中附带的一个C库. 从 http://ftp.gnu.org/gnu/binutils ...
最新文章
- Nature Protocols:整合高通量组学数据集鉴定潜在机制联系的计算框架
- 云路由 vyatta 体验(四)web代理
- 如何通过编程方式添加Native Client服务器别名
- Java语言语法语义分析器设计与实现
- 大图详解负载神器 LVS、Nginx及HAProxy工作原理
- MFC自定义消息的实现方法
- linux内核怎么修改屏幕旋转方向_运维必备:常见的Linux系统故障及其排查的方法...
- spring-boot-资源处理
- java jenkins_java调用jenkins-client实现连接jenkins服务 互联网技术圈 互联网技术圈
- android studio拟器,十二、安装Android Studio 模拟器
- VMware虚拟机鼠标失灵怎么办
- 关键词百度指数叠加-关键词百度指数叠加
- 人工智能写歌词?看我是如何用Python来C位出道的……
- (转)隐藏在生活里的量化投资密码
- phpmywind 教程之多语言版本 面包屑导航之GetPosStr();
- echarts 3d柱状图(bar3D)默认缩放大小
- 电商时代得流量者得天下,思域流量要怎么做
- 网络教育统考计算机和英语作文,2020年9月网络教育统考大学英语B模拟冲刺题试卷5...
- html是网页病毒吗,无弹窗浏览器 目前最具效果性的防网页病毒软件
- 【0109】Linux系统监测工具sysstat介绍