Google Maps と同じように、iOS7でカスタムマップスタイルを実装する方法を探しています。 MapKitではこれが不可能だという投稿をいくつか見つけましたが、それらはすべてしばらく前に投稿されています。明確にするために、スタイルごとに、カスタムカラー、できればフォントについても話します。以下のカスタムGoogleマップスタイルの例。
(出典: servendesign.com )
パフォーマンス上の理由からMapKitを使用したいのですが、サポートされていない場合は、他のフレームワークも使用できます。私が見たのはMapBoxとCloudmade、そしてもちろんGoogle MapsSDKです。
MapKitでそれを行う方法はありますか?そうでない場合、行くための最良の方法は何ですか?
MKMapView
は、カスタマイズしたいプロパティを公開しません。 Google Maps SDKは、マーカーのカスタムカラーとアイコンをサポートしています。これで十分な場合があります。
編集:このレベルのカスタマイズを提供する可能性のあるiOS11にご期待ください。
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リクエストを許可する必要があります。詳細については、 このリンク を参照してください。
もう1つのオプションは MBXMapKit です。これは、AppleのMapKit上に構築されたMapBoxライブラリですが、MapBoxレイヤーを対象としています。これは MapBox iOS SDK とは別のものです。これは、MapKitのように機能することを目的とした、それに基づいていないゼロからの書き直しです。