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にあるタイル サーバー リストから取得されます。
たとえば、雄しべマップ (水彩スタイル) を使用する場合、URL は次のようになります。
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 リクエストを許可する必要があります。詳細については、このリンクをご覧ください。