Google Maps API v2では、すべてのマップマーカーを削除したい場合、単純に次のようにできました。
map.clearOverlays();
Google Maps API v3ではどのようにすればよいでしょうか?
Reference API]1を見ても、'よくわかりません。
V3にはまだそのような機能はないようです。
マップ上にあるすべてのマーカーへの参照を配列にしておくといいと言われています。そして、すべてのマーカーを削除したいときには、配列をループさせて、それぞれの参照に対して.setMap(null)メソッドを呼び出すだけです。
私のバージョンです。
google.maps.Map.prototype.markers = new Array();
google.maps.Map.prototype.getMarkers = function() {
return this.markers
};
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i<this.markers.length; i++){
this.markers[i].setMap(null);
}
this.markers = new Array();
};
google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;
google.maps.Marker.prototype.setMap = function(map) {
if (map) {
map.markers[map.markers.length] = this;
}
this._setMap(map);
}
*コードはこのコードの編集版です http://www.lootogo.com/googlemapsapi3/markerPlugin.html 手動でaddMarkerを呼び出す必要がなくなりました。
長所
欠点
google.maps.Map.prototype.markers = new Array();
google.maps.Map.prototype.addMarker = function(marker) {
this.markers[this.markers.length] = marker;
};
google.maps.Map.prototype.getMarkers = function() {
return this.markers
};
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i<this.markers.length; i++){
this.markers[i].setMap(null);
}
this.markers = new Array();
};
V3にはないと思うので、上記のカスタム実装をしました。
免責事項:このコードは私が書いたものではありませんが、私のコードベースにマージした際に参照を保持するのを忘れてしまったので、どこから来たのかわかりません。
両方の回答に掲載されている"set_map
"関数は、Google Maps v3 APIでは動作しなくなっているようです。
何が起こったのでしょうか?
更新情報:
GoogleがAPIを変更したため、"set_map
"が"setMap
"ではなくなったようです。
http://code.google.com/apis/maps/documentation/v3/reference.html