Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅使用可切换覆盖创建地图?_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

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。