13

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

ここに画像の説明を入力
(出典:servendesign.com

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

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

4

3 に答える 3

18

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 リクエストを許可する必要があります。詳細については、このリンクをご覧ください。

于 2016-08-02T14:01:39.170 に答える
8

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

編集: このレベルのカスタマイズを提供する可能性のある iOS 11 に注目してください。

于 2013-11-28T21:23:11.113 に答える
2

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

于 2013-12-02T20:00:17.150 に答える