接着上节继续介绍图层...
与静态图层相反,动态图层(AGSDynamicLayer)获取的数据都是由服务端实时生成的,除了基本信息外,还声明了exportMapImage方法和exportDelegate委托,从对应的地图服务动态获取地图数据,是所有动态服务图层的基类:
图3-2-8 动态图层的继承关系
动态地图服务图层(AGSDynamicMapServiceLayer)对应了动态地图服务,也是ArcGISServer最基本的服务,url结构:http://<server:port>/<instance>/rest/services/<service>/MapServer,以下是图层初始化代码:
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/ Specialty/ESRI_StateCityHighway_USA/MapServer"]; NSError *error = nil; //同步获取服务信息的方法,不建议放在主线程中使用。 AGSMapServiceInfo *info = [AGSMapServiceInfo mapServiceInfoWithURL:urlerror:&error]; //确认服务的信息后再初始化动态地图服务图层 ... AGSDynamicMapServiceLayer* layer = [AGSDynamicMapServiceLayerdynamicMapServiceLayerWithMapServiceInfo: info];
影像服务图层(AGSImageServiceLayer)对应了影像服务,是Web动态访问影像数据的最佳选择,url结构:http://<server:port>/<instance>/rest/services/<service>/ImageServer,以下是图层初始化代码:
NSURL* url = [NSURL URLWithString: @"http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Portland/CascadeLandsat/ImageServer"]; AGSImageServiceLayer* layer = [AGSDynamicMapServiceLayerimageServiceLayerWithURL: url]; 此外还提供了一些影像数据特有的属性和方法,如:压缩比、波段组合、镶嵌规则、渲染规则和栅格插值,这里就不一一展开介绍。 //单波段灰度图 NSArray* grayscaleBandIds = [NSArrayarrayWithObject:[NSNumber numberWithInt:0] ]; layer.bandIds = grayscaleBandIds; //Red, Green, Blue多波段组合 NSArray* rgbBandIds = [NSArrayarrayWithObjects:[NSNumber numberWithInt:2], [NSNumber numberWithInt:5],[NSNumber numberWithInt:0], nil ]; layer.bandIds = rgbBandIds;
WMS服务图层(AGSWMSLayer)对应了符合OGC WMS1.1\1.1.1\ 1.3标准的网络地图服务,WMS服务是类REST风格,因此可以直接继承AGSDynamicLayer,url结构:http://<server:port>/<instance>/services/<service>/MapServer/WMSServer,以下是图层初始化代码:
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StateCityHighway_USA/MapServer/WMSServer"]; AGSWMSLayer* wmsLayer = [[AGSWMSLayeralloc] initWithURL:url] autorelease];
图形图层(AGSGraphicLayer)比较特殊,不对应任何Service,完全由客户端创建、更新和销毁,是我们响应用户输入、展示查询分析结果的利器。常用的方法包括:addGraphic添加图形,removeGraphic清除图形,dataChanged更新数据等,以下是图层初始化代码:
AGSGraphicsLayer*myGraphicsLayer = [AGSGraphicsLayer graphicsLayer];
在其基础上还衍生出了要素服务图层和草图绘制图层,下面依次进行介绍。
要素服务图层(AGSFeatureLayer)对应了要素服务或动态地图服务,要素服务的特点是提供了空间数据编辑能力,包括要素的几何形状、属性和附件。
图3-2-2-9 要素服务图层的继承关系
从功能设计上可以理解为AGSFeatureLayer = AGSQueryTask + AGSGraphicLayer,先从动态服务查询要素,再把结果填充到图形图层中展示,url结构:
http://<server:port>/<instance>/rest/services/<service>/FeatureServer(MapServer)/<layerid>,以下是图层初始化代码:
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0"];
AGSFeatureLayer* featureLayer =[AGSFeatureLayer featureServiceLayerWithURL: url mode:AGSFeatureLayerModeOnDemand];
Mode参数是个枚举值:快照(Snapshot)/按需(On-Demand)/按查询(Selection),其中Snapshot模式会一次性获取所有要素,适合于要素数量少的场景;On-Demand模式按当前视野动态获取要素,适合要素数量多,且更新频率高的场景;Selection模式默认不获取任何要素,按查询条件动态获取。
AGSFeatureLayer常用的操作包括:查询要素(queryDelegate)、过滤显示(selectFeaturesWithQuery)和编辑要素(updateFeatures)。
* AGSFeatureLayer的详细用法将在“在线编辑”里介绍。
草图编辑图层(AGSSketchGraphicLayer)在图形图层基础上对要素的几何编辑操作进行了封装,传承了ArcGIS专业的编辑模式,包括:要素选中,节点拖动,撤销操作、恢复操作、放大镜效果等等。
图3-2-2-10 草图绘制服务图层的继承关系
草图编辑的主要几何对象:
表3-2-1 草图绘制的主要对象
· 节点(Vertex) · 中点(Mid-point) · 选中的节点(Selected Vertex) · 线(Line) · 面填充(Fill)
|
使用的一般流程是:创建草图编辑图层-获取要素图形(AGSGraphic对象)-响应触摸操作(点击、长按)-保存图形编辑结果-更新要素图形,以下是图层初始化代码:
AGSSketchGraphicsLayer* sketchLyr =[[[AGSSketchGraphicsLayer alloc] initWithGeometry:nil]autorelease];[self.mapViewaddMapLayer:sketchLyr withName:@"Sketch Layer"];
*AGSSketchGraphicLayer不用不知道,用了都说好:),详细用法将在“在线编辑”里介绍。