Googleマップのマーカーをクリアしたい。
marker.setVisible(false)
とmarker.setMap(null)
の違いは何ですか?
でもわかりません、どちらが正しいですか?
2つの方法の違いは、明確に文書化されていないようです。ただし、次の点に注意してください。
setMap(null)
を使用すると、マーカーはMap
への参照を失います。 Map
オブジェクトへの参照を保持しないと、マーカーを再表示できません。
さらに、setMap()
メソッドは_visible_changed
_イベントをトリガーしませんが、setVisible()
メソッドはトリガーします(可視性が実際に切り替えられている場合)。
例:
_var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: new google.maps.LatLng(-25.363, 131.044),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: new google.maps.LatLng(-25.363, 131.044),
map: map
});
google.maps.event.addListener(marker, 'visible_changed', function() {
console.log('visible_changed triggered');
});
marker.setVisible(false); // visible_changed triggered
marker.setVisible(true); // visible_changed triggered
marker.setMap(null); // visible_changed not triggered
marker.setMap(map); // visible_changed not triggered
_
マップ上にマーカーを再度表示する場合はsetVisible(false)
メソッドを使用し、再度表示しない場合はsetMap(null)
メソッドを使用する必要があると思います。
もう1つの重要な違いは、setMap(NULL)
はマーカーに関連付けられたリソースを解放するのに対し、setVisible(false)
はマーカーを非表示にするだけですが、マーカーに関連付けられたリソースは引き続き割り当てられます。
数百または数千のマーカーを処理している場合、これはパフォーマンスとメモリの重大な問題になる可能性があります。