在“Hello World Map”里我们已经成功加载了地图,以前没接触过GIS的同学先得补一补功课,起码要了解空间对象和数据模型的基本概念。常见的地图服务,其背后都有一个地图文档(*.mxd或*.msd),文档中有很多页(图层Layer),每页上又有许多空间要素(点、线、面)可能对应了现实世界中的水井、道路、绿地等等,同时地图文档中还保存了可见性、符号化、比例尺等很多配置信息,用于控制地图的最终呈现效果。
地图组件MapView是地图最基本的容器,负责地图展示和用户交互,因此AGSMapView也是最重要的类,它提供了一系列接口帮助开发者轻松叠加不同的空间数据、漫游地图、显示信息等等。
1. 加载图层
“Hello World Map”示例中叠加了两个图层,分别是基础底图图层(切片地图服务)和人口分布地图图层(动态地图服务),添加的方法很简单,其中Name参数是Layer的唯一标示,不能重名:
//按+1顺序添加图层
[self.mapView addMapLayer:tiledLyrwithName:@"TiledLayer"];
//按指定顺序插入图层
[self.mapView insertMapLayer:tiledLyrwithName:@"TiledLayer0" atIndex: 0];
//按名称删除指定图层
[self.mapViewremoveMapLayerwithName:@"TiledLayer"];
看得出来,MapView中图层绘制的顺序是自下而上,第一个加载的图层意义比较特殊,常称为BaseMapLayer,它将初始化整个地图容器的空间参考(Spatial reference)、初始范围(Initial extent)和全图范围(Full extent),这很关键,因为如果接下来添加的图层空间参考不同,该图层就显示不出来(动态图层除外,可以重投影),那怎么知道是否加载成功?需要引用一个重要的协议:AGSMapLayerDelegate,图层消息委托,会在下一节中详细介绍。
目前支持的图层类型包括了:
· 切片地图服务图层(AGSTiledMapServiceLayer)
· 动态地图服务图层(AGSDynamicMapServiceLayer)
· 影像服务图层(AGSImageServiceLayer)
· 要素服务图层(AGSFeatureLayer)
· 微软Bing服务图层(AGSBingMapLayer)
· OSM服务图层(AGSOpenStreetMapLayer)
· WMS服务图层(AGSWMSLayer)
· 离线切片服务图层(AGSLocalTiledLayer)
· 自定义切片服务图层(OfflineTiledLayer)