符号定义了图形外观的非地理方面。它包括了图形的颜色、线宽、透明度等等。ArcGIS Runtime SDK for iOS包含了许多符号类,其中的每个类可以让你以独特的方式指定符号。每个符号的类型也是特定于一个几何类型(即点、线、面)。

渲染器定义了适用于图形层的符号集。应用于每个图层的符号取决于图形的属性。渲染器指定哪些属性值对应于哪个符号。

符号类型

可用的符号和所适用的几何符号总结在下表中:

符号 几何形状 描述 符号类
简单标记 用简单形状符号化点 AGSSimpleMarkerSymbol
图形标记 用图像来符号化点 AGSPictureMakerSymbol
简单线 线 用预定义类型来符号化线 AGSSimpleLineSymbol
组合 点、线、面 用一组符号来符号化几何图形 AGSCompositeSymbol
简单填充 用一系列形式填充面 AGSSimpleFillSymbol
文本 点、线、面 为几何形状展示文本 AGSTextSymbol

上述所有提到的符合类都继承自AGSSymbol。

创建符号

在许多应用中,相同的符号将多次应用。例如,利用“寻找任务”可以允许用户搜索县。在这种情况下,每次任务被执行时,将相同的符号应用到任务的结果中是很有意义的。在这种情况下,你应该以实例变量/属性类的形式存储该对象的引用。
下面的代码创建了用AGSSimpleMakerSymbol绘制一个蓝色钻石,轮廓为白色,且有三个像素宽。

1
2
3
4
5
6
//Create the AGSSimpleMarker Symbol and set some properties
AGSSimpleMarkerSymbol* myMarkerSymbol = [AGSSimpleMarkerSymbol simpleMarkerSymbol];
myMarkerSymbol.color = [UIColor blueColor];
myMarkerSymbol.style = AGSSimpleMarkerSymbolStyleDiamond;
myMarkerSymbol.outline.color = [UIColor whiteColor];
myMarkerSymbol.outline.width = 3;

下面的代码用半透明的红色填充和红色轮廓(两个像素宽)创建了AGSSimpleFillSymbol。一个简单填充符号的轮廓是AGSSimpleLineSymbol

1
2
3
4
5
6
7
8
9
10
11
//Create the AGSSimpleFillSymbol and set it’s color
AGSSimpleFillSymbol* myFillSymbol = [AGSSimpleFillSymbol simpleFillSymbol];
myFillSymbol.color = [UIColor colorWithRed:0.7 green:0.1 blue:0.1 alpha:0.5];
 
//Create the AGSSimpleLineSymbol used for the outline
AGSSimpleLineSymbol* myOutlineSymbol = [AGSSimpleLineSymbol simpleLineSymbol];
myOutlineSymbol.color = [UIColor redColor];
myOutlineSymbol.width = 2;
 
//set the outline property to myOutlineSymbol
myFillSymbol.outline = myOutlineSymbol;

现在符号已经被声明,你可以将它跟一个图形联系或在渲染器中使用。

渲染器

渲染器定义了一组符号集,将被用于图形层中的图形。你可以用渲染器以不同的颜色和尺寸,基于图形的属性值来符号化属性。要使用渲染,你可以创建它,定义符号,然后设置一个图形层的渲染特性。

1
myGraphicsLayer.renderer = myRenderer;

创建一个简单的渲染

一个简单的渲染器是指为每个图形使用相同的符号。所有你需要做的是用要求的符号创建渲染器,然后为图形层设置渲染特性。

1
2
3
AGSSimpleRenderer* mySimpleRenderer = [AGSSimpleRenderer
simpleRendererWithSymbol:myMarkerSymbol];
myGraphicsLayer.renderer = mySimpleRenderer;

AGSSimpleRenderer的符号属性是只读的。用简单的渲染器使用一个符号,你必须用需要的符号创建渲染器。此外,符号类型必须于属性类型匹配(点要素和标记符号、线要素和线符号、面要素和填充符号)。

创建一个级别间隔渲染器

一个级别间隔渲染器是指基于一些数值属性的值来符号化每个图形。具有相似属性值的图形获得相同的符号。“间隔”定义了符号发生变化时的属性值。

符号和值之间的映射被定义在AGSClassBreak对象的数组里。AGSClassBreaksRenderer 用它的classBreaks属性存储这些映射以作为AGSClassBreak 对象。AGSClassBreak 对象包括用来绘制图形的的符号、最小值和最大值。任何大于或等于最小值,和小于最大值的值将会用类间断符号绘制。

下面的代码创建AGSClassBreaksRenderer并根据大小来符号化城市。总共有3个级别间隔:第一级别是从DBL_MIN到5000,第二基本是从5000到250,000,第三级别是从250,000到DBL_MAX。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//create the renderer with a default simple marker symbol 
//and an attribute field. 
AGSClassBreaksRenderer *cityRenderer = [[[AGSClassBreaksRenderer alloc] init] autorelease]; 
cityRenderer.field = @"POP1990"
cityRenderer.minValue = DBL_MIN;     
 
//create three AGSClassBreak objects, one each for 
//low, medium and high populations and the appropriate 
//symbol (for clarity, the symbol creation has been omitted) 
AGSClassBreak* lowClassBreak = [AGSClassBreak classBreakInfoWithLabel:@"Low" description:@"" maxValue:50000 symbol:lowMarkerSymbol];   
AGSClassBreak* mediumClassBreak =[AGSClassBreak classBreakInfoWithLabel:@"Medium" description:@"" maxValue:250000 symbol:mediumMarkerSymbol];   
AGSClassBreak* highClassBreak = [AGSClassBreak classBreakInfoWithLabel:@"High" description:@"" maxValue:DBL_MAX symbol:highMarkerSymbol];   
 
//add the AGSClassBreak objects to the renderer  
NSMutableArray* classBreaks = [NSMutableArray array];
[classBreaks addObject:lowClassBreak];  
[classBreaks addObject:mediumClassBreak];
[classBreaks addObject:highClassBreak];       
cityRenderer.classBreaks = classBreaks;
 
 
//add the renderer to the graphics layer 
citiesGraphicsLayer.renderer = cityRenderer;

创建唯一值渲染器

唯一值渲染器符号化那些具有匹配属性的图形组。这在名词或是字符串数据中最为常见。例如,你可以用唯一值渲染器来符号化区划名称:黄色为居民区、紫色为工业区、红色为商业区等等。你也可以使用唯一值渲染器在编码数值上,或是序数词如第一、第二、第三等等。

下面的代码创建AGSUniqueValueRenderer ,用三个值VILLAGE,CITY和TOWN来符号化城市,每一个唯一的符号代表TYPE的属性字段(为了清楚起见,符号的创建已被省略)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//create the renderer 
//specify the attribute field whose values will decide the symbol
//we need to provide a default symbol for unmatched values
AGSUniqueValueRenderer *cityRenderer = [[[AGSUniqueValueRenderer alloc] init] autorelease]; 
cityRenderer.defaultSymbol = defaultMakerSymbol; 
cityRenderer.field1 = @"TYPE";     
 
//create three AGSUniqueValue objects, one each for 
//CITY, TOWN, and VILLAGE
AGSUniqueValue* village = [[AGSUniqueValue alloc] initWithValue:@"VILLAGE" label:@"village" description:nil symbol:villageSymbol]; 
AGSUniqueValue* city = [[AGSUniqueValue alloc] initWithValue:@"CITY" label:@"city" description:nil symbol:citySymbol]; 
AGSUniqueValue* town = [[AGSUniqueValue alloc] initWithValue:@"TOWN" label:@"town" description:nil symbol:townSymbol];   
 
//add the AGSUniqueValue objects to the renderer
[cityRenderer.uniqueValues addObject:village]; 
[cityRenderer.uniqueValues addObject:city]; 
[cityRenderer.uniqueValues addObject:town];   
 
//add the renderer to the graphics layer 
citiesGraphicsLayer.renderer = cityRenderer;

改变渲染动态图层

在ArcGIS server 10.1或是更高版本中,动态图层提供了在客户端上改变渲染来自ArcGIS Server(非缓存)地图服务的能力。在动态图层上设置图层定义和绘制选项使得你可以控制在服务中子图层的内容和显示方式。

在服务器上创建渲染器

对于在ArcGIS Server10.1或更高版本中的图层,你可以用GenerateRendererTask 来创建和返回一个级别间隔或是一个唯一值渲染器。所生成的渲染器然后可以被应用到你地图中相应的动态图层中去。

使用任务创建一个唯一值渲染器使得你具备了指定一个颜色渐变过程,从而在渲染器中每一个唯一的符号都可以获得唯一的一个y颜色。使用GenerateRendererTask,利用一些唯一值为属性图层生成一个渲染器,比写代码明确定义每个类更有效。

使用任务创建一个类别间隔渲染器可以使你具备用统计分类的方法来确定你的分类范围的能力。不是用手工来编码类别间隔最小值和最大值,而是你可以指定所需要的分类数目并应用以下的分类方法之一来确定每一个分类的间隔值:自然分割、等间距、分位数、或是标准差。你也可以选择利用总的百分比来标准化你的数据、另一个字段的值或是通过日志。

ArcGIS Runtime SDK for iOS之符号和渲染的更多相关文章

  1. ArcGIS Runtime SDK for iOS开发地图图层-图形图层

    注:本文翻译自:https://developers.arcgis.com/ios/objective-c/guide/creating-a-graphics-layer.htm        创建图 ...

  2. ArcGIS Runtime SDK for iOS开发系列教程(5)——要素信息的绘制

    在客户端绘制点.线.面要素是GIS应用的基本功能,这一讲我将向大家介绍在iOS中如何来实现这一功能.大家都知道在Flex.Silverlight.js中对于要素的绘制都有一个叫GraphicsLaye ...

  3. ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值

    本文原创,转载请注明原创地址 http://blog.csdn.net/dongyu1009/article/details/37697389 用AGSImageServiceIdentifyTask ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

  5. ArcGIS runtime sdk for wpf 授权

    这两天由于runtime sdk for wpf的授权和runtime sdk 其他产品的授权的不一样导致自己混乱不堪. 总结下吧. sdk 简介 当前ArcGIS runtime sdk 包括一系列 ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

    1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——(11)、ArcGIS Runtime SDK常见空间数据加载

    ArcGIS Runtime SDK for Android 支持多种类型空间数据源.每一种都提供了相应的图层来直接加载,图层Layer是空间数据的载体,其主要继承关系及类型说明如下图所示: 转载请注 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——问题集:如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题(转载)

    Geodatabase中中文标注编码乱码一直是一个比较头疼的问题之前也不知道问题出在哪里?在百度后发现园子里的zssai已经对这个问题原因做了一个详细说明.这里将原文引用如下: 说明:此文转载自htt ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——翻译:ArcGIS Runtime SDK for Android 10.2.7发布

    ArcGIS Runtime SDK for Android v10.2.7 released by Dan O'Neill on October 1, 2015(发布时间:2015年10月1日) W ...

随机推荐

  1. hdu 1864 最大报销额【01背包】

    题目链接:https://vjudge.net/problem/HDU-1864 题目大意: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求 ...

  2. IdentityServer4-主题

    一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...

  3. Orleans高级功能

    一.Reentrant Grains二.请求上下文三.激活垃圾收集四.外部任务和Grains五.序列化六.代码生成七.在Silo内的应用程序引导八.拦截器九.取消令牌十.Powershell客户端十一 ...

  4. 潭州课堂25班:Ph201805201 第八课:函数基础和函数参数 (课堂笔记)

    1, 函数定义 def fun(): print('测试函数') fun() #调用函数 return 运行函数返回值 def fun(): name = [1,3,4,5] return name[ ...

  5. filter的dispatcher节点

    1.FORWARD (1)a.jsp页面内容如此<jsp:forward page="/b.jsp"></jsp:forward> (2) a.jsp页面内 ...

  6. Android MediaPlayer架构 -- 前言小知识点(一)

    在Android中可以使用MediaPlayer+SurfaceView来实现一个简单的多媒体播放器. 一  构造函数 java MediaPlayer class 的源码位置:frameworks\ ...

  7. window 10系统怎样手动更改电脑的时间

    win10系统的电脑显示时间默认的是自动网络校时,也就是电脑的时间跟网络时间同步,那么win10系统怎样手动更改电脑时间呢? 点击电脑左下方的win图标,找到菜单里的[设置] 点击菜单里的[设置],弹 ...

  8. vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题

    此文档解决以下问题: 1.在.cs文件中如何访问html控件? 在html控件中添加属性runat="server"即可 2.在html控件中,如何调用js函数? 在html控件中 ...

  9. PS文字生成头像

    链接: 教你用PS把文字拼成肖像.... 28个文字组成的肖像画欣赏

  10. print2flash文档在线预览应用(java,.net)

    一.背景 前段时间,LZ的boss突然给了出了这样一个需求:将原项目中的所有文章关联的附件TXT.PDF.office相关文件全部以flash的形式在网页上进行展示,便于预览.看似简单的需求,整个研发 ...