1

マーカーで常に更新している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 アニメーションを追加しました。

ありがとう!

4

2 に答える 2

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 */
  }
}
于 2013-03-09T00:51:50.737 に答える
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"
}
于 2013-03-09T01:01:44.993 に答える