符号定义了图形外观的非地理方面。它包括了图形的颜色、线宽、透明度等等。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. VR开发 VR development

    VR开发 VR development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com Ho ...

  2. nowcoder提高组2题解

    T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...

  3. BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)

    题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚 ...

  4. Topcoder SRM590 Fox And City

    Problem Statement      There is a country with n cities, numbered 0 through n-1. City 0 is the capit ...

  5. PHP is_numeric 检测变量是否为数字或数字字符串

    bool is_numeric ( mixed $var ) 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE. For example 1: <?php $v = is_ ...

  6. CAD画图技巧经验

    1.CAD中如何输入特殊符号 %% d ——绘制“℃”符号.例如: 98.6 ℃—— 98.6 %% dC : %% c ——绘制圆直径“φ”符号.例如:φ 30 ——%% c30 : %% p —— ...

  7. C#高级编程9 第18章 部署

    C#高级编程9 第18章 部署 使用 XCopy 进行部署 本主题演示如何通过将应用程序文件从一台计算机复制到另一台计算机来部署应用程序. 1.将项目中生成的程序集复制到目标计算机,生成的程序集位于项 ...

  8. 什么是SASS

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一 ...

  9. c#代码混淆

    1.C#编写的dll库如何加密 2..NET Reactor使用教程 3..NET Reactor中各种混淆含义.原理 4..NET Reactor制作软件许可证 5..NET Reactor混淆代码 ...

  10. python测试开发django-47.xadmin上传图片和文件

    前言 xadmin上传图片和上传文件功能 依赖环境 如果没安装Pillow的话,会有报错:practise.Upload.upload_image: (fields.E210) Cannot use ...