Mapboxを使ってルートを描きたいと思います。私はポリラインを追加しようとしました:MapBoxを使って街路名の下に線を描く方法
let polyline = MGLPolyline(coordinates: &coords, count: UInt(coords.count))
mapView?.add(polyline)
しかし、ストリート名の上に描画を続けます。通りの名前の下に移動するにはどうすればいいですか?
Mapboxを使ってルートを描きたいと思います。私はポリラインを追加しようとしました:MapBoxを使って街路名の下に線を描く方法
let polyline = MGLPolyline(coordinates: &coords, count: UInt(coords.count))
mapView?.add(polyline)
しかし、ストリート名の上に描画を続けます。通りの名前の下に移動するにはどうすればいいですか?
MGLPolyline
をMGLMapView
に直接追加すると、アノテーションとして追加されます。現在のところ、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が付属しています経路を表示する。
私が識別子を知っている場合、どのように 'roadLayer'を作成すればよいですか?私はこのようにしようとしました 'let roadLayer = MGLStyleLayer(識別子:" roadLayerIdentifier ")'ここで 'routeLayer'を追加しようとすると失敗します。' mapView?.style?.insertLayer(routeLayer、above:roadLayer) ' – Xernox
@Xernox、 'MGLStyleLayer(identifier:)'は新しいスタイルレイヤを作成します。道路を表す既存のスタイルレイヤーへの参照を取得するには、 'MGLStyle'の' layer(withIdentifier:) 'メソッドを呼び出します。 –