我有一个学生使用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)));
我的问题是三折。
答案 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)));