web-dev-qa-db-ja.com

MapKitのカスタムマップスタイル

Google Maps と同じように、iOS7でカスタムマップスタイルを実装する方法を探しています。 MapKitではこれが不可能だという投稿をいくつか見つけましたが、それらはすべてしばらく前に投稿されています。明確にするために、スタイルごとに、カスタムカラー、できればフォントについても話します。以下のカスタムGoogleマップスタイルの例。

enter image description here
(出典: servendesign.com

パフォーマンス上の理由からMapKitを使用したいのですが、サポートされていない場合は、他のフレームワークも使用できます。私が見たのはMapBoxとCloudmade、そしてもちろんGoogle MapsSDKです。

MapKitでそれを行う方法はありますか?そうでない場合、行くための最良の方法は何ですか?

12
Daniel Larsson

MKMapViewは、カスタマイズしたいプロパティを公開しません。 Google Maps SDKは、マーカーのカスタムカラーとアイコンをサポートしています。これで十分な場合があります。

編集:このレベルのカスタマイズを提供する可能性のあるiOS11にご期待ください。

7
Marco

MKMapViewは、カスタムタイルオーバーレイを使用する可能性も提供します。 Openstreetmapには、カスタムマップを取得するために使用できるタイルサーバーの優れたリストがあります。もちろん、独自のタイルオーバーレイセットを作成する可能性は常にあります。このプロセスは、Openstreetmap wiki here で説明されています。

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)がないことを確認してください。したがって、Info.plistにApp Transport Security Settingsを追加して、この特定のURLへの安全でないHTTPリクエストを許可する必要があります。詳細については、 このリンク を参照してください。

18
dehlen

もう1つのオプションは MBXMapKit です。これは、AppleのMapKit上に構築されたMapBoxライブラリですが、MapBoxレイヤーを対象としています。これは MapBox iOS SDK とは別のものです。これは、MapKitのように機能することを目的とした、それに基づいていないゼロからの書き直しです。

2
incanus