ArcGIS Runtime SDK for iOS之利用代码添加图层(Layers)

注:本篇文章翻译于点击打开链接。

这篇文章将向大家描述地图中的图层类型,并向你展示其在地图中的具体添加过程。同时概述当一个图层被加载到地图中时哪些代理会被调用。

理论上,地图是由一系列图层构成的。地图在AGSMapView的组建中显示并能够被添加为应用程序的接口,所以,地图更像是一块儿空的画布,在上面可以进行一个或多个图层的绘制。图层以从底层到顶层的有序方式排列,从而使得后续图层渲染在先前的层上。每一层的引用数据存储在地图服务、瓦片服务等服务中,而不是存储地理数据。该API支持多种图层类型:瓦片层(tiled layers)、动态层(dynamic layers)、属性层(feature layers)、图层层(graphic layers)以及其他诸如图像层(image layers)、WMS 层(WMS layers)、Bing地图层等。

在地图中添加图层

1)初始化图层。如果该图层依托于网路服务,那就提供该服务的URL即可。如果该网络服务需要安全认证,那么就要获取相关凭证。

URLWithString: @""]; //url服务AGSTiledMapServiceLayer* layer = [AGSTiledMapServiceLayer tiledMapServiceLayerWithURL: url]; 2)添加图层。利用addMapLayer:withName 的方法将图层添加到地图中去。由于不同图层在地中的绘制顺序是自下而上的,所以若想在特定的位置绘插入图层,你可以利用insertMapLayer:withName:atIndex:的方法实现。其中index为0时表示将图层插入到最底层。在添加或是插入图层时应保证图层名字的唯一性,后面你就可以利用该名字作为标识来追踪该图层。 [mapView addMapLayer:layer withName:@"Streets"];

验证图层被添加

图层链接网络服务的过程是在后台进行的,这并不会妨碍图层被添加到地图中的进程。取决于网络连接情况,图层连接上网络服务器并获取需要的数据可能需要一段时间。

当图层被成功加载后或是遇到错误时,它会通知它的代理(delegate)。代理得到这些事件中的任何一个通知时都会采用AGSLayerDelegate协议。

@interface MyViewController : UIViewController <AGSLayerDelegate>…@end 代理(delegate)必须实现正在执行的操作的协议中定义的一个或多个方法。例如,当图层被成功加载时,代理(delegate)必须实现layerDidLoad:方法。类似的,当图层加载遇到错误时,代理将会被通知去实现didFailToLoadwithError:的方法。@implementation MyViewController – (void) layerDidLoad: (AGSLayer*) layer{ NSLog(@"Layer added successfully");}- (void) layer : (AGSLayer*) layer didFailToLoadwithError:(NSError*) error {NSLog(@"Error: %@",error); //Inspect the error and then either … //A. Remove the layer if it's not essential if (layer !== self.mapView.baseLayer)[self.mapView removeMapLayerWithName:@"the layer name"]; //B. Or, try resubmitting the layer, with different URL or credentials perhaps AGSTiledMapServiceLayer* tiledLyr = (AGSTiledMapServiceLayer*)layer; [tiledLyr resubmitWithURL:url credential:cred]; }@end 最后,类的实例应被设置为图层的代理,这将建立类和图层之间的联系,在适当的时候这些代理方法将会在该类中被实现。layer.delegate = self; 一旦图层被成功加载,它的的内容就会显现在地图上,然后你就可以安全的访问图层的属性信息了。

,接受失败等于回归真实的自我,

ArcGIS Runtime SDK for iOS之利用代码添加图层(Layers)

相关文章:

你感兴趣的文章:

标签云: