通过之前的了解我们已经知道了,每一个地图应用首先要展示的是底图,用作基本地理信息的展示。高德作为常用的底图数据供应端,应该会是大多数人的选择,然而网上资料不全,没有一个代码实例。故这里展示下在ArcGIS for iOS端应该如何展示高德底图。
首先想到我们是要通过远端服务的方式,通过高德提供的URL构建一个对象来传入map属性,那么首先要确定高德底图的地址,通过同事了解到,由于一些原因,现在高德官方是没有明确文档说明应该如何使用的,只留下之前的一些地址提供使用。先整理如下:
矢量地图带注记:https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}
矢量地图不带注记:http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}&scl=1<ype=3
影像不带注记:http://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}
道路带注记:http://webst0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8
道路不带注记:http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8<ype=11
矢量带注记http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}
其中一些参数说明:
{1-4}代表服务器,会根据负载均衡自动选择
style:地图类型控制,6卫星图,7道路
lang: zh_cn设置中文,en设置英文
xyz:瓦片底图的一种定位方式。固定格式,这里有坑,后面会再提到。-
通过查看ArGIS api可以得知,我们先要显示一个底图,需要一个构建一个AGSBasemap对象,其中需要传入一个AGSLayer对象。但是AGSLayer是一个基类,如图所示:
我们要确认对应的子类才可以正确加载。查询相关资料(https://www.jianshu.com/p/e9e83b427045),推理得出,上面的URL高德地址属于瓦片底图,也就是我们要用AGSWebTiledLayer来构建并且加载。 -
走到这里,本以为可以顺利加载出来了,但是尝试了上面的所有地址,都无法正确显示,于是点进去官方文档,看到如下描述:
果断将上面地址里面的xyz替换成col row level,才可以完美展示出来
代码:
let amapUrl = "http://webst03.is.autonavi.com/appmaptile?x={col}&y={row}&z={level}&lang=zh_cn&size=1&scale=1&style=7"
let tiledLayer = AGSWebTiledLayer(urlTemplate: amapUrl)
let map = AGSMap(basemap: AGSBasemap(baseLayer: tiledLayer))
mapView.map = map