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);