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-can';不要删除谷歌地图标记_Javascript_Google Maps_Google Maps Markers - Fatal编程技术网

javascript-can';不要删除谷歌地图标记

javascript-can';不要删除谷歌地图标记,javascript,google-maps,google-maps-markers,Javascript,Google Maps,Google Maps Markers,我在使用谷歌地图标记时遇到了一些问题。我有一个包含7个位置的数组。当页面加载时,一个“for”循环在数组中运行,并将前四个位置作为标记放置在地图上。然后,我希望能够单击“删除并添加标记”按钮,该按钮将运行一个函数(称为addMarker2)删除原始的4个位置标记,并将最后3个位置标记添加到地图中 我已经测试了这个函数,只添加了最后3个标记,效果很好。但是,当我添加代码以在添加最后3个标记之前删除前4个标记时,它就不再起作用了。我一直在寻找答案,几乎所有我找到的东西都表明我做得对,尽管我显然没有

我在使用谷歌地图标记时遇到了一些问题。我有一个包含7个位置的数组。当页面加载时,一个“for”循环在数组中运行,并将前四个位置作为标记放置在地图上。然后,我希望能够单击“删除并添加标记”按钮,该按钮将运行一个函数(称为addMarker2)删除原始的4个位置标记,并将最后3个位置标记添加到地图中

我已经测试了这个函数,只添加了最后3个标记,效果很好。但是,当我添加代码以在添加最后3个标记之前删除前4个标记时,它就不再起作用了。我一直在寻找答案,几乎所有我找到的东西都表明我做得对,尽管我显然没有

var mapCanvas = document.getElementById('map-canvas');
var mapOptions = {
  center: new google.maps.LatLng(40, -95),
  zoom: 4,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}

// create the map
var map = new google.maps.Map(mapCanvas, mapOptions);

// array of locations
var pins = [
         ['Cleveland',41.499321,-81.694359],
         ['Florence',34.195435,-79.762566],
         ['Knoxville',35.960638,-83.920739],
         ['Memphis',35.149532,-90.048981],
         ['Nashville',36.162664,-86.781602],
         ['Phoenix',33.448376,-112.074036],
         ['Toronto',43.653225,-79.383186]
    ];


// Loop through the array of locations & place each one on the map  
for( i = 0; i < 4; i++ ) {
    var position = new google.maps.LatLng(pins[i][1], pins[i][2]);
    var marker = new google.maps.Marker({
        position: position,
        map: map,
        icon: 'http://i.imgur.com/FPiUErC.png',
        title: pins[i]['0']
    });
} // end of the for loop


function addmarker2() {
    // remove the first four markers
    for( i = 0; i < 4; i++ ) {
       pins[i].setMap(null); 
    }

    // add the last three markers
    for( i = 4; i < 7; i++ ) {
        var myPosition = new google.maps.LatLng(pins[i][1], pins[i][2]);
        var marker = new google.maps.Marker({
            position: myPosition,
            map: map,
            icon: 'http://i.imgur.com/FPiUErC.png',
            title: pins[i][0]
        });
    } // end of for loop
} // end of addmarker2 function


$("#mysubmit").click(addmarker2);
var-mapCanvas=document.getElementById('map-canvas');
变量映射选项={
中心:新google.maps.LatLng(40,-95),
缩放:4,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
//创建地图
var map=new google.maps.map(mapCanvas,mapOptions);
//位置数组
var引脚=[
[Cleveland',41.499321,-81.694359],
['Florence',34.195435,-79.762566],
[Knoxville',35.960638,-83.920739],
[孟菲斯,35.149532,-90.048981],
[Nashville',36.162664,-86.781602],
[Phoenix',33.448376,-112.074036],
[多伦多,43.653225,-79.383186]
];
//循环浏览一系列位置,并将每个位置放在地图上
对于(i=0;i<4;i++){
var position=new google.maps.LatLng(pins[i][1],pins[i][2]);
var marker=new google.maps.marker({
职位:职位,,
地图:地图,
图标:'http://i.imgur.com/FPiUErC.png',
标题:引脚[i]['0']
});
}//for循环的结束
函数addmarker2(){
//移除前四个标记
对于(i=0;i<4;i++){
引脚[i].setMap(空);
}
//添加最后三个标记
对于(i=4;i<7;i++){
var myPosition=new google.maps.LatLng(pins[i][1],pins[i][2]);
var marker=new google.maps.marker({
职位:我的职位,
地图:地图,
图标:'http://i.imgur.com/FPiUErC.png',
标题:pins[i][0]
});
}//for循环结束
}//addmarker2函数的结尾
$(“#我的提交”)。单击(添加标记2);

我使用setMap(null)的方式肯定有问题。一开始它不起作用,但是如果您注释掉试图删除前4个标记的“for”循环,那么它将成功添加最后3个标记。我只需要它同时完成这两个任务。

如果其他人也有同样的问题并发现这个问题,正如ray所说,我需要创建一个数组将标记推入,然后将setMap(null)应用到标记数组,而不是将其应用到包含我的位置信息的原始数组(pins[])

var mapCanvas = document.getElementById('map-canvas');
var mapOptions = {
  center: new google.maps.LatLng(40, -95),
  zoom: 4,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}

// create the map
var map = new google.maps.Map(mapCanvas, mapOptions);

// array of locations
var pins = [
         ['Cleveland',41.499321,-81.694359],
         ['Florence',34.195435,-79.762566],
         ['Knoxville',35.960638,-83.920739],
         ['Memphis',35.149532,-90.048981],
         ['Nashville',36.162664,-86.781602],
         ['Phoenix',33.448376,-112.074036],
         ['Toronto',43.653225,-79.383186]
    ];

// this array will hold the markers
var markers = [];

// Loop through the array of locations & place each one on the map  
for( i = 0; i < 4; i++ ) {
    var position = new google.maps.LatLng(pins[i][1], pins[i][2]);
    var marker = new google.maps.Marker({
        position: position,
        map: map,
        icon: 'http://i.imgur.com/FPiUErC.png',
        title: pins[i]['0']
    });
    //each marker is added to the markers array
    markers.push(marker);
} // end of the for loop


function addmarker2() {
    // remove the first four markers
    for( i = 0; i < 4; i++ ) {
       // the loop removes the first four results from the markers array
       markers[i].setMap(null); 
    }

    // add the last three markers
    for( i = 4; i < 7; i++ ) {
        var myPosition = new google.maps.LatLng(pins[i][1], pins[i][2]);
        var marker = new google.maps.Marker({
            position: myPosition,
            map: map,
            icon: 'http://i.imgur.com/FPiUErC.png',
            title: pins[i][0]
        });
    } // end of for loop
} // end of addmarker2 function


$("#mysubmit").click(addmarker2);
var-mapCanvas=document.getElementById('map-canvas');
变量映射选项={
中心:新google.maps.LatLng(40,-95),
缩放:4,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
//创建地图
var map=new google.maps.map(mapCanvas,mapOptions);
//位置数组
var引脚=[
[Cleveland',41.499321,-81.694359],
['Florence',34.195435,-79.762566],
[Knoxville',35.960638,-83.920739],
[孟菲斯,35.149532,-90.048981],
[Nashville',36.162664,-86.781602],
[Phoenix',33.448376,-112.074036],
[多伦多,43.653225,-79.383186]
];
//这个数组将保存标记
var标记=[];
//循环浏览一系列位置,并将每个位置放在地图上
对于(i=0;i<4;i++){
var position=new google.maps.LatLng(pins[i][1],pins[i][2]);
var marker=new google.maps.marker({
职位:职位,,
地图:地图,
图标:'http://i.imgur.com/FPiUErC.png',
标题:引脚[i]['0']
});
//每个标记都将添加到标记数组中
标记器。推(标记器);
}//for循环的结束
函数addmarker2(){
//移除前四个标记
对于(i=0;i<4;i++){
//循环从标记数组中删除前四个结果
标记[i].setMap(空);
}
//添加最后三个标记
对于(i=4;i<7;i++){
var myPosition=new google.maps.LatLng(pins[i][1],pins[i][2]);
var marker=new google.maps.marker({
职位:我的职位,
地图:地图,
图标:'http://i.imgur.com/FPiUErC.png',
标题:pins[i][0]
});
}//for循环结束
}//addmarker2函数的结尾
$(“#我的提交”)。单击(添加标记2);

我已经通过在开发人员控制台上键入进行了实时调试,并且找到了删除所有标记的方法。(使用
array.push()方法保存)

下面是代码——只需调用
neutralize()

函数中和(){
对于(var i=0;i
您需要在标记上设置映射,而不是在管脚阵列中存储数据。我太棒了!谢谢你的帮助。
function neutralize() {
    for (var i = 0; i < markers.length; i++) {
        try{
            markers[i].f.setMap(null);
         }
        catch{
            markers[i].setMap(null);
         }    
    }

    markers = [];
}