2

だから私は、管理者ユーザーがさまざまな停留所で特定の場所を巡る旅を作成できるようにするアプリを書いています。

地図の表示、マーカーの追加、flyTo の場所などに を使用してMapbox GLいます。

cURLAPIの実装を使用Mapboxして運転ルートを取得し、地図上に線を引いていました

呼び出しの例として、cURL自分の方向を表す座標のリストを受け取ります。

問題は、これらのポイントを地図上で接続しようとすると発生します。

HTMLいくつかの例としてJS

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title></title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.18.0/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.18.0/mapbox-gl.css' rel='stylesheet' />
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
</head>
<body>

<div id='map'></div>
<script>
mapboxgl.accessToken = '<ACCESS TOKEN>';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v8',
    center: [-122.486052, 37.830348],
    zoom: 15
});

map.on('load', function () {
    map.addSource("route", {
        "type": "geojson",
        "data": {
            "type": "Feature",
            "properties": {},
            "geometry": {
                "type": "LineString",
                "coordinates": [
                 [-155.088899,19.722942],[-155.08565,19.72472],[-155.084661,19.723701],[-155.083569,19.723139],[-155.079557,19.722262],[-155.074227,19.721938],[-155.069939,19.722545],[-155.070061,19.721225],[-155.07007,19.711726]
                ]
            }
        }
    });

    map.addLayer({
        "id": "route",
        "type": "line",
        "source": "route",
        "layout": {
            "line-join": "round",
            "line-cap": "round"
        },
        "paint": {
            "line-color": "#888",
            "line-width": 8
        }
    });
});
</script>

</body>
</html>

線を引くために接続される一連の座標を確認できます。これらのポイントを接続して、線が道路のみをたどるようにする方法があるかどうか疑問に思っていました(運転用)。

よりよく説明するために、これは出力のクローズズームです mapbox glは一連の点を線で結びます

私の問題の非常に一般的な説明であることは知っていますが、理解できることを願っています。

私はいくつかの魔法をやろうとしましMapbox Gl Directions APIたが、運がありません。追加しcontollerたくないものを追加する必要があります。ルートを描画するだけでよく、パブリック ユーザーがルートを変更できないようにします。

何かアドバイスはありますか?

4

3 に答える 3

3

私は今日これをやろうとしていて、git ハブから mapbox-gl-directions プロジェクトをプルダウンし、src/directions.js にマイナーな mod を作成することで、ルート案内をマップに取得し、開始と終了のコントロールを削除することに成功しました。

48行目から52行目をコメントアウトしました

// Add controllers to the page
//new Inputs(inputEl, store, this.actions, this.map);
//new Instructions(directionsEl, store, {
//  hoverMarker: this.actions.hoverMarker,
//  setRouteIndex: this.actions.setRouteIndex
//}, this.map);

これは、 https://github.com/mapbox/mapbox-gl-directions/blob/master/CONTRIBUTING.mdに従って npm セットアップを実行することで、npm のセットアップと自分のテスト ファイルで比較的簡単にテストできました。

npm install & npm start & open http://localhost:9966/example/

次の行も追加しました。

localStorage.setItem('MapboxAccessToken', '<TOKEN HERE>');

require('../); の下 example/index.js にあります。サンプルを npm で実行している間に、プラグインの新しいバンドル バージョンにhttp://localhost:9966/example/bundle.jsからアクセスできます。

その後、ラインを変更することができました

<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-directions/v2.0.0/mapbox-gl-directions.js'></script>

<script src='http://localhost:9966/example/bundle.js'></script>

npm のサンプル ランナーにはたくさんの魔法がかかっていますが、それについては何も知りませんが、私のマシンではすべてうまくいきました。お役に立てれば。ルート案内線は、アニメーション、ピッチ、ズーム、方位のアニメーションで機能します。以下のスクリーン グラブを参照してください。

ここに画像の説明を入力

更新: ここに返信を追加して、スクリーン グラブを表示できるようにします。@Andrejus、このハックは最初からパスを描画するのではなく、mapbox gl 方向プラグインの動作に依存しているため、組み込みの道路をたどり、方向 API にアクセスして、A->B->C-> を実行するためのウェイポイントを追加できます。 Dそのまま:

map.on('load', function() {
    directions.setOrigin(start); 
    directions.addWaypoint(0, [-0.07571203, 51.51424049]);
    directions.addWaypoint(1, [-0.12416858, 51.50779757]);
    directions.setDestination(end);  
});

ドキュメントによると、最大 25 のウェイポイントを設定できます。

ここに画像の説明を入力

mapbox-gl-directions プラグインには、オンスクリーン コントロールをオフにするオプションがありません。それらは、ルート案内がマップに追加されるときに呼び出される Directions クラスの onAdd(map) メソッドに追加されます。以前にそれらを削除できるかどうかを確認したかったので、ハッキングを実験していました。柔軟なソリューションを作成するために、Directions クラスのコンストラクターに渡されるオプションを追加できる場合があります。そこに渡される他のオプションがありますが、これらは Directions API への呼び出しのパラメーターにバインドされているようです。

var directions = new mapboxgl.Directions({
  unit: 'metric',
  profile: 'cycling'
}); 

したがって、それよりも良い解決策があるかもしれません。私は Mapbox を 1 日未満使用していますが、その記述方法や構造についてはよくわかりません。

また、コードの変更は mapbox gl のコアではなくプラグインにあるため、比較的孤立していることにも注意してください。ところで、このプラグインは、ポイントの配列を返す、呼び出していた cURL API のラッパーです。おそらく、GitHub のソースには、それが間違いなくやりたいことであれば、行をレンダリングする場所をたどるコードが含まれます。

于 2016-05-23T16:22:58.767 に答える
-1

実際には、方向 API から応答を取得し、返された配列を Mapbox Map Matching に渡すだけで、完全なルートが返されると思った方が簡単でした。すべて Mapbox API に文書化されています

于 2016-06-08T22:17:13.607 に答える