ArcGIS Engine开发教程之图层符号化
一、概述
地图符号不仅具有确定的空间位置以及空间地物的性质:例如在一个城市管线系统中不同的线符号表示不同类型的管线,不同的点符号表示不同类型的设备等等,而且地图符号也可以表达与空间位置相关的丰富信息:例如人口密度符号可以直观的表示人口数量的空间分布情况。所以地图数据的符号化决定着地图以何种“面目”展现给地图的使用者,自此空间数据的符号化对GIS开发有非常重要的意义。
ArcGIS Engine9.3提供了丰富的控件和组件库来实现图层符号化的相关功能。ArcGIS Engine9.3提供了SymbologyControl控件用于显示ArcGIS符号库中的符号(关于ArcGIS符号请查找相关文档),而组件库中的组件对象分为Color , Symbol, Renderer三大系列,图层符号化就是通过多个组件对象来合作完成。
1.1目标
1.熟悉ArcGIS Engine符号化之Color(颜色)体系
2.熟悉ArcGIS Engine符号化之Symbol(符号)体系
3.熟悉ArcGIS Engine符号化之Renderer( 渲染)体系
4.利用ESRI自带的符号库进行符号化图层
二、符号化Color(颜色)体系
2.2符号化Color(颜色)体系
1.ArcGIS颜色模型
ArcGIS提供Color(颜色)的模型有多种分别是:
RGB颜色模型:最常用,所有颜色都是通过红色(Red)、绿色(Green)、蓝色(Blue)这三原色的混合来显示。
CMY颜色模型:青(Cyan)、洋红(Magenta)和黄(Yellow)三种颜色的简写,是相减混色模式,用这种方法产生的颜色之所以称为相减色,主要用于印刷中。
HSV颜色模型:色彩(H),纯度(S),明度(V)。
Gray模型:没有彩色的,灰度图像由8位信息组成,并使用256级的灰色来模拟颜色层次。
HLS模型: Hue(色相)、Luminance(亮度)、Saturation(饱和度)。
三、符号化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种 类型:
图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 Gallery |
IStyleGalleryStorage | 管理Style Gallery中的符号库文件 |
IStyleGalleryClass | 控制符号库中Style Gallery Class |
IEnumStyleGalleryItem | 枚举一组Style Gallery items |
IStyleGalleryItem | 定义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
ArcGIS Engine开发教程之图层符号化相关推荐
- ArcGIS Engine开发教程之图层符号化(四)——符号化之Renderer( 渲染)体系
符号化之Renderer( 渲染)体系 ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类.接下来分别介绍FeatureRender和RasterRende ...
- ArcGIS Engine开发---图层符号化
使用ServerStyle 如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系 ...
- C#,ArcGIS Engine开发入门教程
利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 Dixon整理 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法 ...
- 【转】使用ArcGIS Engine开发ArcGIS Server的胖客户端浏览程序
摘要:在ArcGIS 9的家族中,增加了两个新产品:ArcGIS Engine和ArcGIS Server.由于它们各自分别在C/S领域和B/S领域的强大开发能力,一经推出就备受瞩目.其中ArcGIS ...
- ArcGIS Engine开发前基础知识(2)
ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...
- ArcGIS Engine开发基础总结(一)
标准Engine功能 地图浏览 地图制作 数据查询 数据分析 及 所有的开发控件 -MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...
- ArcGIS Engine开发:框架/结构+对象库
ArcGIS Engine开发:框架/结构+对象库 框架/结构: ArcGIS Engine 开发人员有权使用一系列的控制器,这些控制器 准许很多属性.事件和方法的使用.尽管一个简单的应用软件 仅仅通 ...
- GIS二次开发:实验一 ArcGIS Engine 开发初步
实验一 ArcGIS Engine 开发初步 一.实验目的 掌握ArcGIS Engine的安装: 熟悉ArcGIS Engine中几个常用的控件: 搭建第一个简单的ArcGIS Engine 程序: ...
- ArcGIS Engine开发的类ArcCatalog数据管理工具
这是以前的ArcGIS Engine开发成果,主要是Geodatabase方面的,模仿ArcCatalog的相关功能,进行了相关的开发 系统环境: VS2010.ArcGIS Engine10.Dev ...
- ArcGIS Engine开发(1)
ArcGIS Engine开发 一.要素的类型 esriFeatureType 二.esriFeatureType与esriGeometryType的区别与联系 三.Arcgis Engine 接口说 ...
最新文章
- 1.1 内存的四个分区
- [自带避雷针]DropShadowEffect导致内存暴涨
- SLB+Tomcat时request.RemoteAddr无法获取正确的客户端IP的问题解决方案
- python接口自动化(九)--python中字典和json的区别(详解)
- 防腐投加器需要加盐吗_风冷却器的正确防腐措施应该怎么做?
- JavaScript 验证 API中的setCustomValidity()方法
- FortiClient cannot establish caused by TLS version
- 有妇如此,夫复何求!
- 在php中使用高德api,javascript - 高德地图定位如何调用api?
- bzoj 5394: [Ynoi2016]炸脖龙 扩展欧拉定理+树状数组
- 通知器(Notifier)
- iphone 程购买实现
- python的matplotlib风格_Python可视化|matplotlib04-绘图风格(plt.style)大全
- Java学习意见 (来自CSDN 网友wlh86618 )
- java bigdecimal 开方_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)
- HTML5及CSS3基础知识(持续更新)
- Aptana Studio3安装方式
- 人才吸引力评价模型研究
- JAVA开发(java的多线程开发)
- docker安装es+mac安装Kibana工具+es查询语法笔记
热门文章
- countifs函数怎么用,excel函数的操作步骤
- idea显示Multiple Spring Boot run configurations were detected. Services allows to manage multiple run
- 微信android版字体,微信炫彩字下载-微信七彩字体 安卓版v1.6.2-PC6安卓网
- 【数据分析实例】 2021年十万条厦门招聘数据分析
- leetcode(Array)---11,盛最多水的容器
- 免费天气API,全国天气 JSON API接口,可以获取五天的天气预报
- 墨魂服务器维修,墨魂琅轩路线怎么选最新游戏攻略
- 装机不求人,10 分钟完成电脑配置挑选
- uvalive4987
- 计算机系固态硬盘机械硬盘,直观:如何在固态硬盘+机械硬盘上安装系统_IT /计算机_资料...