Google Maps API V3 метод fitBounds()
У меня есть этот код, который отображает карту.
function initialize() {
var myOptions = {
center: new google.maps.LatLng(45.4555729, 9.169236),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP,
panControl: true,
mapTypeControl: false,
panControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
},
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.LARGE,
position: google.maps.ControlPosition.RIGHT_CENTER
},
scaleControl: false,
streetViewControl: false,
streetViewControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
}
};
var map = new google.maps.Map(document.getElementById("mapCanvas"),
myOptions);
var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776);
var myPlace = new google.maps.LatLng(45.4555729, 9.169236);
var marker = new google.maps.Marker({
position: Item_1,
map: map});
var marker = new google.maps.Marker({
position: myPlace,
map: map});
var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
map.fitBounds(bounds);
}
Даже если две точки отделены от 25 км, я получаю этот результат:
![enter image description here]()
Пока я хотел бы сделать масштабирование более высокого уровня.
Подобно этому
![enter image description here]()
Я использую метод fitBounds()
var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
map.fitBounds(bounds);
Спасибо за поддержку
Ответы
Ответ 1
Это происходит потому, что LatLngBounds()
не принимает две произвольные точки в качестве параметров, но точки SW и NE
используйте метод .extend()
для объекта с пустыми границами
var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);
Демо на http://jsfiddle.net/gaby/22qte/
Ответ 2
LatLngBounds
должен быть определен с точками в (юго-западном, северо-восточном) порядке. Ваши баллы не в этом порядке.
Общее исправление, особенно если вы не знаете, что точки определенно будут в этом порядке, это расширение пустых границ:
var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);
API будет определять границы.
Ответ 3
У меня такая же проблема, что и вы описываете, хотя я наращиваю свои LatLngBounds, как было предложено выше. Проблема в том, что вещи асинхронны и вызов map.fitBounds()
в неподходящее время может оставить вас с результатом, как в Q.
Лучший способ, которым я нашел, - поместить вызов в простаивающий обработчик следующим образом:
google.maps.event.addListenerOnce(map, 'idle', function() {
map.fitBounds(markerBounds);
});
Ответ 4
var map = new google.maps.Map(document.getElementById("map"),{
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var bounds = new google.maps.LatLngBounds();
for (i = 0; i < locations.length; i++){
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
bounds.extend(marker.position);
}
map.fitBounds(bounds);