我有一个谷歌地图,我不断用标记更新。如果标记重叠(完全相同的位置),我有一个计数器,它会添加到标记内的数字。问题是每次我添加一个新标记时,它并不总是把它放在另一个标记之上。因此,例如,标记中的数字为10。一个新的标记下来11和动画后它隐藏在10后面。有几次标记后,顶部标记将是正确的数字,如21而不是10。
那么有没有办法在添加新标记之前按纬度/经度删除标记?这就是我所拥有的:
for (var i=0; i<response.trans.length; i++) {
//add to location
location[response.trans[i].location_id] += 1;
latLng = new google.maps.LatLng(response.trans[i].latitude, response.trans[i].longitude);
marker = new google.maps.Marker({
map:map,
position: latLng,
icon: 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=1|0|FF0000|12|_|'+client[response.trans[i].location_id],
animation: google.maps.Animation.DROP
});
markers.push(marker);
}
谢谢雷蒙德!你把我推向正确的方向
这是对我有用的代码:
for (var i=0; i<response.trans.length; i++) {
//add to total count
totalCount += 1;
//add to location
location[response.trans[i].location_id] += 1;
markerChanged = false;
for(x=0; x < markers.length; x++){
if(markers[x].getPosition().lat().toFixed(6) == response.trans[i].latitude.toFixed(6) && markers[x].getPosition().lng().toFixed(6) == response.trans[i].longitude.toFixed(6)){
markers[x].setIcon('http://chart.apis.google.com/chart?chst=d_map_spin&chld=1|0|FF0000|12|_|'+location[response.trans[i].location_id]);
markers[x].setAnimation(google.maps.Animation.DROP);
markerChanged = true;
}
}
if(markerChanged === false){
latLng = new google.maps.LatLng(response.trans[i].latitude, response.trans[i].longitude);
marker = new google.maps.Marker({
map:map,
position: latLng,
icon: 'http://chart.apis.google.com/chart?chst=d_map_spin&chld=1|0|FF0000|12|_|'+location[response.trans[i].location_id],
animation: google.maps.Animation.DROP
});
markers.push(marker);
}
}
所以我添加了内部for循环,它检查当前标记。我不得不使用toFixed(6)将其更改为字符串。浮点精度正在逐渐消失。因此,如果标记相同,则会更改图标。如果是新标记,它会将其添加到地图中。我添加了DROP动画,因为我仍然希望它显然已更新。
谢谢!
答案 0 :(得分:1)
我相信您可以在将标记添加到地图之前聚合列表的信息。也就是说,
var location = {};
for (var i = 0; i < response.trans.length; i++) {
location[response.trans[i].location_id] += 1;
}
for (location_id in location) {
if (location.hasOwnProperty(location_id)) {
/* add marker */
}
}
答案 1 :(得分:0)
如果它们位于同一位置,您可以尝试:
for(i=0; i < markers.length; i++) {
if(markers[i].getPosition().lat() == response.trans[i].latitude && markers[i].getPosition().lng() == response.trans[i].longitude)
markers[i].icon = "number11.png"
}