ArcGIS Runtime SDK for iOS移动开发之WMS图层

       注:本文翻译自:https://developers.arcgis.com/ios/objective-c/guide/wms-layer.htm

        web地图服务(WMS)图层基于来自开放地理空间联盟(OGC)的数据。OGS web地图服务是一个为地图交互提供的OpenGIS的标准规范,而该交互基于从互联网上的服务请求地图影像。WMS图层允许你访问来自互联网的这些服务并可以将它们的内容添加到地图中去。该图层只支持WMS 版本1.3,1.1.1和1.1。

        被具有兼容性的WMS服务所支持的每个操作性在线资源实际上是一个HTTP统一定位符(URL),所以WMS服务可以被看做是REST服务。不同于一个标准的web服务,SOAP客户端没必要使用WMS服务。你可以通过向服务器发送一个URL请求,从而获取WMS服务的元数据、地图影像、属性的特征值,并在浏览器中以文档的形式或是图像的形式来查看相应的反应。
        WMS图层由AGSWMSLayer表示,这个类是AGSDynamicLayer的子类。

        实例化WMS 图层
        要实例化AGSWMSLayer,你需要提供URL到WMS服务,而不是地图服务端点,通常格式如下:                 http://<server:port>/<instance>/services/<service>/MapServer/WMSServer
        例如,如果你有一个"日本"的文件夹,里面包含了以默认的arcgis实例形式运行在myServer上的东京地图服务,那么您的WMS服务的URL是这样的:
http://myServer/arcgis/services/Japan/Tokyo/MapServer/WMSServer
        注:URL的结构取决于服务器的类型。因此,如果你从ArcGIS以为的服务器上使用WMS服务,请查阅该URL结构的对应文档。

//Instantiate the layer and add it to the mapView.
NSURL* url = [NSURL URLWithString: @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/WMSServer"];  
AGSWMSLayer* wmsLayer = [[AGSWMSLayer alloc] initWithURL:url];
[mapview addMapLayer:wmsLayer withName:@"Highways"];
          验证图层是否被加载
        当图层准备就绪后,它所加载的属性将被启用。那么你就可以安全地访问其属性了。下面的代码向你展示了如何确定图层已被加载:

if(layer.loaded)
{   
  NSLog(@"Initial Envelope : %@", layer.initialEnvelope);  
}
          配置WMS图层
         您可以通过修改 visibleLayers属性来改变WMS图层的子层的可见性。

//only display US highways and states sublayers
layer.visibleLayers = [NSArray arrayWithObjects:@"ushigh", @"states", nil];
        不支持的坐标系
        可能存在这样的情况,当你正请求的WMS图层的空间参考系可能不受WMS服务支持。在这种情况下,地图视图不会绘制WMS地图图像。如果你要处理这种情况,你可以将一个键-值观察器(KVO)与图层的error属性相关联。

#pragma mark - Set KVO To Check Layer Drawing Errors

 ...   
 [layer addObserver:self forKeyPath:@"error" options:0 context:nil]; 
 ...  
}

//This method is invoked by KVO when the error property is assigned a new value
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
	
	AGSLayer* layer = (AGSLayer*)object;
 NSLog(@"Layer Drawing Error: %@", layer.error];
	

}






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值