ArcGIS for iOS 开发系列(6) – 基础篇-图层-动态图层

接着上节继续介绍图层...

2 动态图层

    与静态图层相反,动态图层(AGSDynamicLayer)获取的数据都是由服务端实时生成的,除了基本信息外,还声明了exportMapImage方法和exportDelegate委托,从对应的地图服务动态获取地图数据,是所有动态服务图层的基类

ArcGIS for iOS 开发系列(6) – 基础篇-图层-动态图层_第1张图片

图3-2-8 动态图层的继承关系

2.1 动态地图服务图层(AGSDynamicMapServiceLayer)

    动态地图服务图层(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];

2.2 影像服务图层(AGSImageServiceLayer)

    影像服务图层(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;

2.3 WMS服务图层(AGSWMSLayer)

    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];

2.4 图形图层(AGSGraphicLayer)

    图形图层AGSGraphicLayer比较特殊,不对应任何Service,完全由客户端创建、更新和销毁,是我们响应用户输入、展示查询分析结果的利器常用的方法包括:addGraphic添加图形,removeGraphic清除图形,dataChanged更新数据等,以下是图层初始化代码:

    AGSGraphicsLayer*myGraphicsLayer = [AGSGraphicsLayer graphicsLayer];

    在其基础上衍生出了要素服务图层和草图绘制图层,下面依次进行介绍。

2.5 要素服务图层(AGSFeatureLayer)

    要素服务图层(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的详细用法将在“在线编辑”里介绍。

2.6 草图编辑图层(AGSSketchGraphicLayer)

    草图编辑图层(AGSSketchGraphicLayer)在图形图层基础上对要素的几何编辑操作进行了封装,传承了ArcGIS专业的编辑模式,包括:要素选中,节点拖动,撤销操作、恢复操作、放大镜效果等等。


图3-2-2-10 草图绘制服务图层的继承关系

     草图编辑的主要几何对象:

表3-2-1 草图绘制的主要对象

·          节点(Vertex

·          中点(Mid-point

·          选中的节点(Selected Vertex

·          线(Line

·          面填充(Fill

 

ArcGIS for iOS 开发系列(6) – 基础篇-图层-动态图层_第2张图片

    使用的一般流程是:创建草图编辑图层-获取要素图形(AGSGraphic对象)-响应触摸操作(点击、长按)-保存图形编辑结果-更新要素图形,以下是图层初始化代码:

  
  
  
  
AGSSketchGraphicsLayer* sketchLyr =[[[AGSSketchGraphicsLayer alloc] initWithGeometry:nil]autorelease];
[self.mapViewaddMapLayer:sketchLyr withName:@"Sketch Layer"]; 

*AGSSketchGraphicLayer不用不知道,用了都说好:),详细用法将在“在线编辑”里介绍。



你可能感兴趣的:(ArcGIS for iOS 开发系列(6) – 基础篇-图层-动态图层)