MKMapView還提供了使用自定義拼貼覆蓋的可能性。 Openstreetmap有很多可用於獲取自定義地圖的平鋪服務器列表。當然,總有可能創建自己的貼磚套裝。該流程在Openstreetmap wiki here中描述。
斯威夫特一個可能的實現看起來是這樣的:
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黑暗:http://a.basemaps.cartocdn.com/dark_all/${z}/${x}/${y}.png
。
看到上面的URL沒有SSL支持(HTTP)。因此,您需要通過在Info.plist中添加App Transport Security Settings
來允許對此特定URL的不安全HTTP請求。欲瞭解更多信息,請登錄this link。
感謝您的意見。你知道谷歌地圖SDK與原生MapKit相比在性能方面如何? –
我沒有權限,但我無法辨別Google Maps SDK演示應用程序和使用MapKit的任何應用程序之間的主要性能差異。因人而異。 – Marco