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 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之符号和渲染的更多相关文章
- 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 ...
随机推荐
- 洛谷AC破百题纪念!
- ESLint + lint-staged 禁用老项目中的es6
前言 ESLint作为插件化的javascript代码检测工具,为我们的平时的开发保驾护航,好处就不多说了详情查看官网. 问题 有这么一个五年前开发的老项目,机缘巧合到了我们这边来维护. 项目是zep ...
- php页面静态化,ob缓存方法
<?php ob_start();//开启缓存 //要生成静态网页的内容开始 ?> 中间的html代码 <?php //要生成静态网页的内容结束 //把生成的静态内容保存到文件,而不 ...
- 洛谷.4114.Qtree1(树链剖分)
题目链接 模板题都错了这么多次.. //边权赋到点上 树剖模板 //注意LCA.链的顶端不能统计到答案! #include <cstdio> #include <cctype> ...
- Oracle 删除重复数据只留一条(转)
转自:http://www.cnblogs.com/252e/archive/2012/09/13/2682817.html 查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是 ...
- MyEclipse启动时 弹出提醒框
1. MyEclipse has detected that less than 5% of the 31MB of PS Survivor Space (Heap memory) space rem ...
- Android跨进程通信:图文详解 Binder机制 原理
binder原理讲的很详细 https://blog.csdn.net/carson_ho/article/details/73560642
- 体验jQuery和AngularJS的不同点以及AngularJS的迷人之处
本篇通过jQuery和Angular两种方式来实现同一个实例,从而体验两者的不同点以及AngularJS的迷人之处. 首先当然需要引用jquery.js和angular.js文件. ■ 使用jQuer ...
- 关于“UI线程”
http://www.cppblog.com/Streamlet/archive/2013/05/05/199999.html 缘起 这是一篇找喷的文章. 由于一些历史原因和人际渊源,周围同事谈论一些 ...
- selenium+python自动化78-autoit参数化与批量上传
前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 ...