ArcGIS Runtime SDK for iOS之符号和渲染
符号定义了图形外观的非地理方面。它包括了图形的颜色、线宽、透明度等等。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 propertiesAGSSimpleMarkerSymbol* 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 colorAGSSimpleFillSymbol* myFillSymbol = [AGSSimpleFillSymbol simpleFillSymbol];myFillSymbol.color = [UIColor colorWithRed:0.7 green:0.1 blue:0.1 alpha:0.5];//Create the AGSSimpleLineSymbol used for the outlineAGSSimpleLineSymbol* myOutlineSymbol = [AGSSimpleLineSymbol simpleLineSymbol];myOutlineSymbol.color = [UIColor redColor];myOutlineSymbol.width = 2;//set the outline property to myOutlineSymbolmyFillSymbol.outline = myOutlineSymbol; |
现在符号已经被声明,你可以将它跟一个图形联系或在渲染器中使用。
渲染器
渲染器定义了一组符号集,将被用于图形层中的图形。你可以用渲染器以不同的颜色和尺寸,基于图形的属性值来符号化属性。要使用渲染,你可以创建它,定义符号,然后设置一个图形层的渲染特性。
|
1
|
myGraphicsLayer.renderer = myRenderer; |
创建一个简单的渲染
一个简单的渲染器是指为每个图形使用相同的符号。所有你需要做的是用要求的符号创建渲染器,然后为图形层设置渲染特性。
|
1
2
3
|
AGSSimpleRenderer* mySimpleRenderer = [AGSSimpleRenderersimpleRendererWithSymbol: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 valuesAGSUniqueValueRenderer *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之符号和渲染的更多相关文章
- ArcGIS Runtime SDK for iOS开发地图图层-图形图层
注:本文翻译自:https://developers.arcgis.com/ios/objective-c/guide/creating-a-graphics-layer.htm 创建图 ...
- ArcGIS Runtime SDK for iOS开发系列教程(5)——要素信息的绘制
在客户端绘制点.线.面要素是GIS应用的基本功能,这一讲我将向大家介绍在iOS中如何来实现这一功能.大家都知道在Flex.Silverlight.js中对于要素的绘制都有一个叫GraphicsLaye ...
- ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值
本文原创,转载请注明原创地址 http://blog.csdn.net/dongyu1009/article/details/37697389 用AGSImageServiceIdentifyTask ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...
- ArcGIS runtime sdk for wpf 授权
这两天由于runtime sdk for wpf的授权和runtime sdk 其他产品的授权的不一样导致自己混乱不堪. 总结下吧. sdk 简介 当前ArcGIS runtime sdk 包括一系列 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO
1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(11)、ArcGIS Runtime SDK常见空间数据加载
ArcGIS Runtime SDK for Android 支持多种类型空间数据源.每一种都提供了相应的图层来直接加载,图层Layer是空间数据的载体,其主要继承关系及类型说明如下图所示: 转载请注 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题(转载)
Geodatabase中中文标注编码乱码一直是一个比较头疼的问题之前也不知道问题出在哪里?在百度后发现园子里的zssai已经对这个问题原因做了一个详细说明.这里将原文引用如下: 说明:此文转载自htt ...
- 《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 ...
随机推荐
- 洛谷 P1352 没有上司的舞会【树形DP】(经典)
<题目链接> <转载于>>> > 题目描述: 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的 ...
- springboot项目接入配置中心,实现@ConfigurationProperties的bean属性刷新方案
前言 配置中心,通过key=value的形式存储环境变量.配置中心的属性做了修改,项目中可以通过配置中心的依赖(sdk)立即感知到.需要做的就是如何在属性发生变化时,改变带有@Configuratio ...
- SQLite中的SELECT子句使用通配符
SQLite中的SELECT子句使用通配符 在SELECT子句中支持两个通配符,分别为*和table_name.*.其中,*通配符会将FROM子句中每个源表的所有用户定义的列进行输出.例如,下面的SQ ...
- Python3学习策略
自学Python要点 [来自:http://www.cnblogs.com/shsxt/p/9138950.html] 1.找一本浅显易懂,例程比较好的教程,从头到尾看下去. 不要看很多本,专注于一本 ...
- C语言字符串操作详细总结
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...
- centos6.9 忘记密码解决方法
若果忘记了 root 的密码,解决方法如下: 我采用的 linux 版本是 centos-6.9 , 经过亲身实践证明,该方法是 ok 的 在开机启动的时候按键盘上的“E”键会进入如下界面. 选择相应 ...
- sql ,内连接,外连接,自然连接等各种连接
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和c ...
- 可以替代putty的ssh客户端
1. Bitvise SSH Client http://www.putty.org/ Bitvise SSH Client is an SSH and SFTP client for Windows ...
- Maven学习总结(11)——Maven Tomcat7自动部署
1.配置tomcat-users.xml文件 在tomcat安装目录下找到tomcat-users.xml文件.该文件路径为[tomcat安装根目录]/conf/ 修改文件内容,增加下列内容: < ...