fitBounds 周辺の setTimeout を削除しようとすると、スマート ズームが機能しなくなります。私は、Google Maps API がほとんど非同期であることを知っています。これが、タイマーが私のコードを機能させる理由です。私は数時間探していましたが、このタイマーを削除する解決策が見つかりませんでした. 誰かが私を助けてくれますか?
var map;
var markers = [];
var bounds;
//Initialise google map
function initMap() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(46.950324, -71.256578);
var mapOptions = {
zoom: 7,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('map'), mapOptions);
}
function filterSelection() {
deleteMarkers();
for(...) {
//Prends les informations de la compagnie
var varlat = div[j].getAttribute('data-lat');
var varlong = div[j].getAttribute('data-long');
var nom = div[j].getAttribute('data-nom');
var infowindow = new google.maps.InfoWindow({
content: ""
});
if(varlat && varlong) {
var maplatlong = new google.maps.LatLng(varlat, varlong);
//Mets le point sur la carte
var marker = new google.maps.Marker({
map: map,
position: maplatlong,
title: nom,
info: nom
});
//Pop up lorsqu'on clique sur le point
marker.addListener('click', function() {
infowindow.setContent( this.info );
infowindow.open( map, this );
});
markers.push(marker);
bounds.extend(maplatlong);
}
}
setTimeout(function(){
if(markers.length > 0 ) {
map.fitBounds(bounds);
google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
this.setZoom(map.getZoom()-1);
if (this.getZoom() > 15) {
this.setZoom(15);
}
});
} else {
map.setCenter(new google.maps.LatLng(46.950324, -71.256578));
}
}, 3000);
}
// Deletes all markers in the array by removing references to them. AIzaSyATmzbLFTjqkr_vOKK1F8CIZ0cw1G0RNRA
function deleteMarkers() {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(null);
}
markers = [];
bounds = new google.maps.LatLngBounds(null);
}