Javascript 仅使用可切换覆盖创建地图?
我正在尝试创建由几个部分透明的层组成的贴图(使用)。默认情况下,这些层都应该相互叠加以形成完整的地图,但用户应该能够打开或关闭它们的任何组合(同时保持顺序),以创建他们喜欢的任何视图 到目前为止,我很幸运地使用Javascript 仅使用可切换覆盖创建地图?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在尝试创建由几个部分透明的层组成的贴图(使用)。默认情况下,这些层都应该相互叠加以形成完整的地图,但用户应该能够打开或关闭它们的任何组合(同时保持顺序),以创建他们喜欢的任何视图 到目前为止,我很幸运地使用map.mapTypes在单个图层上实现了这一点,但是当通过map.overlymaptypes添加所有图层时,我遇到了几个障碍: 如果未调用map.setMapTypeId()(未显示任何控件,且映射未正确居中),并且无法使用覆盖调用,则映射似乎无法完全初始化 不清楚如何在不直接修改ma
map.mapTypes
在单个图层上实现了这一点,但是当通过map.overlymaptypes
添加所有图层时,我遇到了几个障碍:
map.setMapTypeId()
(未显示任何控件,且映射未正确居中),并且无法使用覆盖调用,则映射似乎无法完全初始化map.overlayMapTypes
数组的情况下切换覆盖的可见性,这会使它们的正确排序变得复杂。我更喜欢类似于交通/交通/照片/等内部控制的东西初始化函数。我会发布一个链接,但地图图像不公开:
function initialize() {
map = new google.maps.Map(document.getElementById("map_canvas"), {
zoom: 0,
center: center
});
/* if these lines are uncommented, the single layer displays perfectly */
//map.mapTypes.set("Layer 3", layers[3]);
//map.setMapTypeId("Layer 3");
//return;
var dummy = new google.maps.ImageMapType({
name: "Dummy",
minZoom: 0,
maxZoom: 6,
tileSize: new google.maps.Size(256, 256),
getTileUrl: function() {return null; }
});
map.mapTypes.set("Dummy", dummy);
map.setMapTypeId("Dummy");
// layers is an array of ImageMapTypes
for (var i = 0; i < layers.length; i++) {
map.overlayMapTypes.push(layers[i]);
}
}
函数初始化(){
map=new google.maps.map(document.getElementById(“map_canvas”){
缩放:0,
中心:中心
});
/*如果这些行未注释,则单个图层将完美显示*/
//map.mapTypes.set(“层3”,层[3]);
//map.setMapTypeId(“第3层”);
//返回;
var dummy=new google.maps.ImageMapType({
名称:“哑巴”,
最小缩放:0,
最大缩放:6,
tileSize:new google.maps.Size(256256),
getTileUrl:function(){return null;}
});
map.mapTypes.set(“Dummy”,Dummy);
map.setMapTypeId(“虚拟”);
//layers是ImageMapType的数组
对于(变量i=0;i
如您所见,我尝试创建一个“虚拟”映射类型(对于平铺URL,它总是返回null
)作为基本映射。虽然这确实会导致控件显示,但仍然无法正确居中
创建只包含可切换覆盖的地图的最佳方法是什么
更新:如果您还记得设置投影,那么虚拟贴图类型将非常有效。这至少解决了一个问题。:-) 我使用ImageMapType,但不将其添加到mapTypes。我只是将它添加到OverlyMapTypes中,当我需要删除它时,我使用setAt将OverlyMapTypes中的条目设置为null
您将需要向UI中添加单独的控件来切换各个层。我从未想过尝试将空值插入到覆盖类型中,但这很有效。如果需要,我可以创建一个自定义控件,但是你知道MapType控件显示的“下拉覆盖”是否有接口吗?我不能肯定,但我相信MapType是一个单一的选择控件。如果您希望混合/组合层,则需要编写自己的控件。尝试将其添加到mapTypes中,就像您在示例中所做的那样,但请确保您每天晚上运行API或至少运行API的3.4版本。我认为新的控制方式是>=3.4。