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


Спасибо за поддержку

746   4  

4 ответов:

это происходит потому, что 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/

LatLngBounds должен быть определен с точками в порядке (юго-запад, северо-восток). Ваши очки не в том порядке.

общее исправление, особенно если вы не знаете, что точки определенно будут в этом порядке, заключается в расширении пустых границ:

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

API будет сортировать границы.

у меня та же проблема, что вы описываете, хотя я создаю свои LatLngBounds, как предложено выше. Проблема в том, что вещи асинхронны и вызывают map.fitBounds() в неподходящее время может оставить вас с результатом, как в Q. Лучший способ, который я нашел, это поместить вызов в простой обработчик следующим образом:

google.maps.event.addListenerOnce(map, 'idle', function() {
    map.fitBounds(markerBounds);
});
 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);

Comments

    Ничего не найдено.