MKMapView 还提供了使用自定义图块覆盖的可能性。Openstreetmap 有一个很棒的瓦片服务器列表,您可以使用它来获取自定义地图。当然,总是有可能创建自己的图块覆盖集。该过程在此处的 Openstreetmap wiki 中进行了描述。
Swift 中的一个可能实现如下所示:
1.导入MapKit
import MapKit
2.添加覆盖到地图
let overlayPath = self.mapViewModel.overlayURL
let overlay = MKTileOverlay(URLTemplate: overlayPath)
overlay.canReplaceMapContent = true
self.mapView.addOverlay(overlay)
3.符合MKMapViewDelegate
class ViewController: UIViewController, MKMapViewDelegate { ... }
4.实现委托方法以使用正确的渲染器来显示瓷砖
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
guard let tileOverlay = overlay as? MKTileOverlay else {
return MKOverlayRenderer(overlay: overlay)
}
return MKTileOverlayRenderer(tileOverlay: tileOverlay)
}
在上面的示例中,overlayURL 取自 openstreetmap 上的切片服务器列表:OpenstreetMap Tile Servers。
例如,如果您想使用雄蕊图(具有水彩风格),您的网址将如下所示:
let overlayURL = "http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg"
如果您正在搜索深色模式地图,您可能最好使用 Carto Dark: http://a.basemaps.cartocdn.com/dark_all/${z}/${x}/${y}.png
。
看到上面的 URL 没有 SSL 支持 (HTTP)。因此,您需要通过App Transport Security Settings
在 Info.plist 中添加 来允许对这个特定 URL 的不安全 HTTP 请求。有关更多信息,请查看此链接。