マーカーで常に更新しているGoogleマップがあります。マーカーが重なっている場合(まったく同じ場所)、マーカー内の数値に追加するカウンターがあります。問題は、新しいマーカーを追加するたびに、常に他のマーカーの上に配置されるとは限らないことです。たとえば、マーカーには 10 という数字が含まれています。新しいマーカーが 11 で表示され、アニメーションの後、10 の後ろに隠れます。いくつかのマーカーの後、10 ではなく 21 のように、トップ マーカーが正しい数になる場合があります。
新しいマーカーを追加する前に、緯度/経度でマーカーを削除する方法はありますか? ここに私が持っているものがあります:
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 アニメーションを追加しました。
ありがとう!