0

MapBox.js (v1.6.0) を使用して、TileMill で作成したいくつかのタイルを表示している学生がいます。これらのタイルは、TileMill が提供するツールチップ機能 (ドキュメント) を使用して、インタラクティブ性を追加します。私の生徒はまた、MapBox Streets レイヤーを使用して、道路などの詳細なビューを提供しています。問題は、マップでこれらのレイヤーを両方とも使用すると、タイルからのインタラクティブ性が機能しないことです。

動作しないコードは次のとおりです。

var map = L.mapbox.map("map");

var tilesOSM = L.mapbox.tileLayer("username.id1");
var tilesTileMill = L.mapbox.tileLayer("username.id2");

map
    .addLayer(tilesOSM)
    .addLayer(tilesTileMill)
    .setView(L.latLng(61, -160.5), 4)
    .setMaxBounds(L.latLngBounds(L.latLng(50,-180), L.latLng(72,-129)));

このコードを何度か繰り返してみましたが、L.mapbox.map(3) メソッドを使用してから、L.map.addLayer() 関数の _ insertAtTheBottom_ パラメータを使用する以外に方法はありません。

var map = L.mapbox.map("map", "username.id2", {});

map
    .addLayer(L.mapbox.tileLayer("username.id1"), true)
    .setView(L.latLng(61, -160.5), 4)
    .setMaxBounds(L.latLngBounds(L.latLng(50,-180), L.latLng(72,-129)));

私の質問は 3 つです。

  1. これら 2 つの実装の違いは何ですか?
  2. L.mapbox.tileLayer() を使用して作成された tileLayer が、L.mapbox.map(3) を使用して作成され、自動的に追加されたものと異なるのはなぜですか?
  3. 今後の API の変更でこの不連続性に対処する予定はありますか? または、TileMill 2 でインタラクティブ タイルのサポートが廃止される予定はありますか?
4

1 に答える 1

1

これら 2 つの実装の違いは何ですか?

L.mapbox.map が内部で行うことを確認すると、指定したレイヤーに gridLayer と gridControl が追加されます。基本的に、マップ コンストラクターは、作成できるすべての安全な仮定を作成し、便宜上自動的に実行します。

L.mapbox.tileLayer() を使用して作成された tileLayer が、L.mapbox.map(3) を使用して作成され、自動的に追加されたものと異なるのはなぜですか?

それは同じです - を使用すると、ミックス内に gridLayer と gridControl がありL.mapbox.map(3)、それらが物事をインタラクティブにします。

API の今後の変更で、この不連続性に対処する計画はありますか?

API 設計ほどの不連続性ではありません: tileLayers を gridLayers および gridControls から分離したままにしておくことを決定したので、それらを組み合わせて一致させることができます - インタラクティブな機能がどのレイヤーから来るかを切り替えたい場合、またはタイル レイヤーを無効にせずにインタラクティブを無効にしたい場合は、あなたはできる。

インタラクティブ タイルのサポートは TileMill 2 で廃止されますか?

いいえ、TileMill 2 を使用して、インタラクティブ性をサポートする方法を確認できます。これを削除したり、段階的に廃止したりする予定はありませんが、ベクター タイルには新しい操作方法があります。

2 番目の例では、次のようなものが必要です。

var map = L.mapbox.map("map", "username.id2", {});
var gridLayer = L.mapbox.gridLayer("username.id1").addTo(map);
var gridControl = L.mapbox.gridControl(gridLayer).addTo(map);

map
    .addLayer(L.mapbox.tileLayer("username.id1"), true)
    .setView(L.latLng(61, -160.5), 4)
.setMaxBounds(L.latLngBounds(L.latLng(50,-180), L.latLng(72,-129)));
于 2014-02-21T15:55:12.920 に答える