2017-05-09 11 views
1

Mapboxを使ってルートを描きたいと思います。私はポリラインを追加しようとしました:MapBoxを使って街路名の下に線を描く方法

let polyline = MGLPolyline(coordinates: &coords, count: UInt(coords.count)) 
mapView?.add(polyline) 

しかし、ストリート名の上に描画を続けます。通りの名前の下に移動するにはどうすればいいですか?

答えて

4

MGLPolylineMGLMapViewに直接追加すると、アノテーションとして追加されます。現在のところ、Mapbox iOS SDKではすべての機能の上に注釈を追加することしかできません。

ただし、SDKにはruntime stylingという別のAPIがあり、マップの任意のレイヤーの下または上にデータを配置できます。 this exampleから、シェイプソースをマップのスタイルに追加し、シェイプソースをレンダリングするラインレイヤーを追加するには、次のようなコードを使用できます。 (MGLLineStyleLayerはMapKitのMKOverlayPathRendererを彷彿とさせる。)

let routeFeature = MGLPolylineFeature(coordinates: &coords, count: UInt(coords.count)) 
let routeSource = MGLShapeSource(identifier: "route", shape: routeFeature, options: nil) 
mapView.style?.addSource(routeSource) 
let routeLayer = MGLLineStyleLayer(identifier: "route", source: routeSource) 
// Set properties like lineColor, lineWidth, lineCap, and lineJoin 
mapView.style?.insertLayer(routeLayer, above: roadLayer) // or below: labelLayer 

あなたは、道路やラベル層の識別子を知っていれば上記のコードは動作します。スタイルをMapbox Studioに開いて識別子を取得することができます。より堅牢なものについては、ルートスタイルを最初の非シンボルレイヤーの上に挿入して、マップスタイルのすべてのレイヤーを繰り返し処理できます。 (ラベルとアイコンは、シンボルレイヤを使用してレンダリングされます。)

for layer in style.layers.reversed() { 
    if !(layer is MGLSymbolStyleLayer) { 
     style.insertLayer(routeLayer, above: layer) 
     break 
    } 
} 

をところで、あなただけのルート線よりも多くを必要とする場合、Mapbox Navigation SDK for iOSが最適化されていますマップを含む、完全なターンバイターンのナビゲーションUIが付属しています経路を表示する。

+0

私が識別子を知っている場合、どのように 'roadLayer'を作成すればよいですか?私はこのようにしようとしました 'let roadLayer = MGLStyleLayer(識別子:" roadLayerIdentifier ")'ここで 'routeLayer'を追加しようとすると失敗します。' mapView?.style?.insertLayer(routeLayer、above:roadLayer) ' – Xernox

+1

@Xernox、 'MGLStyleLayer(identifier:)'は新しいスタイルレイヤを作成します。道路を表す既存のスタイルレイヤーへの参照を取得するには、 'MGLStyle'の' layer(withIdentifier:) 'メソッドを呼び出します。 –

関連する問題