Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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,我试图用谷歌地图和js解决一个难题。 我从未使用过谷歌地图,我对JS的了解也很有限 我的主要问题是:如何在谷歌地图上创建多个独立的标记,将它们存储到某种数据结构中,然后在需要时删除特定的标记? 例如,每个标记都有自己的id号,我得到它的lat和lon,我使用此函数将其添加到地图: function createMarkers(geocoder, map, name, latitude, longitude, ib, image) { //Setting the o

我试图用谷歌地图和js解决一个难题。 我从未使用过谷歌地图,我对JS的了解也很有限

我的主要问题是:
如何在谷歌地图上创建多个独立的标记,将它们存储到某种数据结构中,然后在需要时删除特定的标记?

例如,每个标记都有自己的id号,我得到它的lat和lon,我使用此函数将其添加到地图:

function createMarkers(geocoder, map, name, latitude, longitude, ib, image) {                
//Setting the onclick marker function
var onMarkerClick = function() {
    var marker = this;
    var latLng = marker.getPosition();
    ib.setContent(name);
    ib.open(map, marker); 
};

google.maps.event.addListener(map, 'click', function() {
    ib.close();
});

//In array lat long is saved as an string, so need to convert it into int.
var lat = parseFloat(latitude);
var lng = parseFloat(longitude);

var marker = new google.maps.Marker({
    map: map,
    icon: image,
    position: new google.maps.LatLng(lat, lng),
    title: name
});

//Adding the marker.
google.maps.event.addListener(marker, 'click', onMarkerClick);
}

根据GoogleMapsAPIv3,marker实例具有方法setMap。信息技术 在指定的地图或全景图上渲染标记。如果地图设置为空,则将删除标记。从中提取

像这样的

marker.setMap(null);
另一方面,若你们想删除一个特定的标记,正如你们所说的,你们必须在一些数据结构中保存标记实例,以便能够访问特定的标记。由于您有一个id,考虑到标记的id是唯一的,您可以使用散列。差不多吧

// this variable must be global and accesible from your createMarkers method
var all_markers = {};


function createMarkers(geocoder, map, name, latitude, longitude, id, image) {   

//........

var marker = new google.maps.Marker({
    map: map,
    icon: image,
    position: new google.maps.LatLng(lat, lng),
    title: name
});

all_markers[id] = marker;

//.....................

}

function removeMarker(id) {
  all_markers[id].setMap(null);
  delete all_markers[id];
}

如果您试图捕获堆快照,则标记仍然存在。上面的方法只将其映射属性指向null,但不会将其从内存中删除