使用MapBox.js独立添加时,TileMill Interactive图层无法正常工作

时间:2014-02-20 21:03:28

标签: javascript leaflet interactive mapbox tilemill

我有一个学生使用MapBox.js(v1.6.0)来显示他们在TileMill中制作的一些图块。这些磁贴使用TileMill(documentation)提供的工具提示功能来添加一些交互性。我的学生也使用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)));

我的问题是三折。

  1. 这两种实现有什么区别?
  2. 为什么使用L.mapbox.tileLayer()创建的tileLayer与使用L.mapbox.map(3)创建并自动添加的不同?
  3. 是否有计划在未来对API的更改中解决这种不连续性,或者是否会在TileMill 2中删除对交互式磁贴的支持?

1 个答案:

答案 0 :(得分:1)

  

这两种实现有什么区别?

如果您签出what L.mapbox.map does internally,它会为您指定的图层添加gridLayer和gridControl。基本上,地图构造函数可以做出所有可以做出的安全假设,并且为方便起见自动完成。

  

为什么使用L.mapbox.tileLayer()创建的tileLayer与使用L.mapbox.map(3)创建并自动添加的不同?

它是一样的 - 当你使用L.mapbox.map(3)时,混合中有一个gridLayer和gridControl,这些是使事物互动的。

  

是否有计划在未来对API的更改中解决这种不连续性

它不是一个不连续性而不是API设计:我们决定让tileLayers与gridLayers和gridControls分离,这样你就可以混合使用它们。匹配它们 - 如果你想切换哪些图层交互功能,或者在不禁用图块层的情况下禁用交互性,你可以。

  

是否支持在TileMill 2中删除交互式磁贴?

不,您可以使用TileMill 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)));