Google Maps v3 корректирует уровень масштабирования после инициализации карты - PullRequest
10 голосов
/ 18 апреля 2011

Я инициализирую карту Google и периодически (каждые 30 секунд) обновляю маркеры / информационные окна на карте. Я использую границы для автоматического увеличения, но убедитесь, что все маркеры / информационные окна видны.

Моя проблема в том, что информационные окна расположены на краю карты и часто обрезаются. Итак, мне нужно уменьшать на 1 каждый раз, когда карта обновляется. Я могу использовать map.zoom, чтобы определить текущий уровень масштабирования и пересчитать новое желаемое значение, но я не знаю, как установить это новое значение.
Может ли параметр масштабирования быть установлен только при инициализации карты?

Конечно, это просто?

Ниже моя функция «обновления»;

function updatePage() {
//clear current markers
clearOverlays();

var location1 = new google.maps.LatLng(team1data.lat, team1data.lon);
var location2 = new google.maps.LatLng(team2data.lat, team2data.lon);
var bounds = new google.maps.LatLngBounds();
bounds.extend(location1);
bounds.extend(location2);
map.fitBounds(bounds);
var curZoom = map.zoom;
console.log(curZoom);
var newZoom = (curZoom - 1);
console.log(newZoom);



var infowindow1 = new google.maps.InfoWindow({
content: '<div style=\"height:100px;width:230px;font-size:12px;\"><span style="font-weight:bold;">' + team1data.user + ' (' + team1data.location + '): </span>' + team1data.tweet + '</div>'
});

var infowindow2 = new google.maps.InfoWindow({  
 content: '<div style=\"height:100px;width:230px;font-size:12px;\"><span style="font-weight:bold;">' +  team2data.user + ' (' + team2data.location + '): </span>' + team2data.tweet + '</div>'  
});  

//can add as many markers to the map as you like
var marker1 = new google.maps.Marker({
  position: location1,
  map: map,
  title: "Team 1"
});
markersArray.push(marker1);

google.maps.event.addListener(marker1, 'click',
function() {
  infowindow.open(map, marker);
});

var marker2 = new google.maps.Marker({
 position: location2, 
 map: map,
 title:"Team 2"
});
markersArray.push(marker2);

infowindow1.open(map, marker1);
infowindow2.open(map, marker2);

setTimeout("team1tweets()", 30000)
}

1 Ответ

24 голосов
/ 18 апреля 2011

Согласно справке API, вы можете использовать map.setZoom (число);

https://developers.google.com/maps/documentation/javascript/reference#methods

Также лучше использовать map.getZoom (), чтобы получить уровень масштабирования, поскольку map.zoom сообщит вам только начальный уровень масштабирования, а не текущий.

...