使用MapBox.js独立添加TileMill交互层时无法工作



我有一个学生正在使用MapBox.js(v1.6.0)来显示他们在TileMill中制作的一些瓷砖。这些tile使用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)));

我的问题有三个方面。

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

这两种实现之间有什么区别?

如果检查L.mapbox.map在内部的操作,它会为您指定的层添加一个gridLayer和gridControl。基本上,映射构造函数会做出它可以做出的所有安全假设,并为方便起见自动进行这些假设。

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

这是一样的-当您使用L.mapbox.map(3)时,混合中有一个gridLayer和gridControl,这些都是使事情交互的原因。

是否有计划在API 的未来变化中解决这种不连续性

它不像API设计那样具有不连续性:我们决定保持tileLayers与gridLayers和gridControlls解耦,这样您就可以混合&匹配它们-如果你想切换交互功能来自哪个层,或者在不禁用平铺层的情况下禁用交互,你可以。

是否会在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)));

最新更新