8

私はグーグルマップAPI3.9を使用しています。アプリでは、ユーザーはマーカーを追加または削除できます。ユーザーがマップをクリックすると、情報ウィンドウが表示されます。ユーザーは、名前、緯度、経度を入力し、次のように画像を保存をクリックできます。

google.maps.event.addListener(map, 'click', function(event) {

  point = new google.maps.Marker({
    position: event.latLng
    , map: map
    , icon: 'resource/image/mapIcons/point.png'
    , id: id
    , type:"point"
  });

  type = point.type;
  newPoint = true;
  existingPoint = false;
  markerObj = this;

  inputInfowindow.setContent("<table style='width:92%;' id='inputTable'>" +
                             "<tr> <td>point</td> </tr>" +
                             "<tr> <td><input class='infoInput' type='text' id='name' placeholder='name'/> </td> </tr>" +
                             "<tr> <td><input class='infoInput'type='text' id='lat' placeholder='latitude'/></td> </tr>" +
                             "<tr> <td><input class='infoInput'type='text' id='lon' placeholder='longitude'/></td> </tr>" +
                             "<tr><td><input type='image' src='resource/image/mapIcons/save.png' onclick='save()' class='saveImage' alt='save'/> </td></tr>");

  event1 = event.latLng;
  currentMarker = point;
  inputInfowindow.open(map,point);

});

DBに保存されたマーカー。ユーザーが削除ボタンをクリックすると、次のメソッドが呼び出されます。

function deleteMarker(id,rev) {
  var marker  = markerObj;
  markerObj = undefined;
  var x = confirm("are you sure to delete marker?");
  if(x){
    deleteLocations(id,rev);//removes marker details from DB
    if(marker){
      console.log(marker);
      marker.setMap(null);
    }
  }
}

しかし、marker.setMap(null); マーカーはマップから削除されますが、マップ上にあります。console.log(marker);で確認しました。マーカーオブジェクトが正しく表示され、コンソールでエラーは発生しません。グーグルを何度も実行しましたが、結果はありません。これについてサポートしてください。

4

5 に答える 5

13

ドキュメントから-

マップからオーバーレイを削除するには、オーバーレイのsetMap()メソッドを呼び出し、nullを渡します。このメソッドを呼び出してもオーバーレイは削除されないことに注意してください。マップからオーバーレイを削除するだけです。代わりにオーバーレイを削除する場合は、マップからオーバーレイを削除してから、オーバーレイ自体をnullに設定する必要があります。

だからmarker.setMap(null)あなたも書くべきですmarker=null

Update1-

function deleteMarker(id,rev) {
  var x = confirm("are you sure to delete marker?");
  if(x)
  {
    deleteLocations(id,rev);//removes marker details from DB
    if(markerObj)
    {
       console.log(markerObj);
       markerObj.setMap(null);
       markerObj=null;
    }
  }
}

アップデート2-

これが機能する簡単なデモです。コードを見て、コードが間違っている場所を確認してください。おそらく、コードにいくつかの可変スコープの問題が存在します。

ワーキングデモ

于 2012-12-31T09:20:02.193 に答える
2

marker.setMap(null)オブジェクトを削除せず、非表示にするだけです。削除するにはmarker = null;

于 2012-12-31T09:10:13.797 に答える
2

私も同じ問題を抱えていました。次の前にこれらのメソッドを呼び出す必要がありますmarkers[index].setMapp(null)

map.setCenter(desMarker[index].getPosition());
desMarker[index].setPosition(null);

これらの呼び出しの後:

markers[index].setMapp(null)

于 2018-07-03T11:49:34.420 に答える
0

マップクリックイベントで、これをmarkerObjに割り当てます。これは、マーカーオブジェクトではなく、マップオブジェクトを参照していますが。

に変更します

markerObj = point;

期待どおりに機能するはずです。

于 2013-01-01T05:36:59.967 に答える
0

同様のエラーが発生しましたが、私の解決策があなたのケースに当てはまるかどうかはわかりません。それでも、ページが読み込まれたときに、データベースに示されている座標からのマーカーでマップがいっぱいになるようにコードを設定しました。次に、ユーザーがデータベースにポイントを追加できるようにしてから、マップ上のユーザーが選択した場所にマーカーを追加しました。

私が気付いていなかったのは、データベースで座標が変更または作成されたときはいつでも、コードがマップ上のすべての座標にマーカーを再追加していたことです。したがって、ポイントを作成するときはいつでも、手動で座標にマーカーを追加し、データベースで座標にマーカーを追加していました。したがって、コードが壊れていると思ったとき、実際に起こっていたのは、同じ場所にある2つのポイントのうちの1つを削除していたことです。

したがって、データベースから座標とマーカーをどのように取得しているかは正確にはわかりませんが、調べる価値はあります。

于 2017-07-14T15:58:50.647 に答える