Google API v3 подгоняет масштаб карты и ограничивает все маркеры - PullRequest
2 голосов
/ 09 февраля 2012

Я работаю над этим некоторое время и пытаюсь реализовать широтные границы, чтобы динамически вписаться во все контакты на холсте карты. Но это не работает. Если кто-то сделал что-то похожее на мой код, может кто-нибудь направить меня по правильному пути?

var geocoder; 
var map; 
function initializeMap() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(39.88445,-86.11084); 
    var myOptions = { 
      zoom: 9, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), 
        myOptions); 
} 
function codeAddress() { 
    var bound = new google.maps.LatLngBounds(); 
    var markers = new Array(); 
    var infowindow = new google.maps.InfoWindow({});  
    $('.LocAddHidden').each(function(index) { 
        var addy = $(this).text(); 
        geocoder.geocode( { 'address': addy}, function(results, status) { 
            if (status == google.maps.GeocoderStatus.OK)  
            { 
                map.setCenter(results[0].geometry.location); 
                var marker = new google.maps.Marker({ 
                position: results[0].geometry.location, 
                map: map,                
                title:addy       
                });      
            }  
        }); 
    }); 
} 

  $(document).ready(function(){ 
    initializeMap(); 
    codeAddress();    
  for(var i in markers) 
  { 
    bound.extend(markers[i].getPosition()); 
  } 
  map.fitBounds(bound); 
});                           

Ответы [ 4 ]

3 голосов
/ 30 октября 2012

Чтобы IE8 работал ..

Вместо использования: for(var i in markersArray)

Используйте это: for (i = 0; i < markersArray.length; i++)

2 голосов
/ 09 февраля 2012

Основная проблема в том, что вы расширяете границы в пустом цикле. Я не вижу, куда вы добавляете что-либо в массив маркеров, который вы создаете в начале codeAddress (). Вы должны добавить маркер, который вы создаете в запросе геокодирования.

Но вместо того, чтобы добавить его в массив маркеров в одном цикле, а затем расширить границы в другом цикле, вы можете избавиться от второго цикла и просто расширить границы в первом цикле.

И вам не нужно повторно центрировать карту на каждой итерации цикла. Установка границ в самом конце позволяет перецентрировать и изменить масштаб.

И Чири указал на еще одну проблему с областью действия переменной.

0 голосов
/ 14 мая 2014

После нескольких попыток у меня получается что-то простое и практичное:

function simulateBounds() {

    var bounds = new google.maps.LatLngBounds;

    for (var i = 0; i < arrayChinchetas.length; i++) {
        bounds.extend(arrayChinchetas[i].getPosition());
    }

    SurOeste = bounds.getSouthWest();
    NorEste = bounds.getNorthEast();

    //Constructs a rectangle from the points at its south-west and north-east corners.
    var latlandBounds = new google.maps.LatLngBounds(SurOeste, NorEste);

    map.fitBounds(latlandBounds);

}
0 голосов
/ 09 февраля 2012

Вам необходимо объявить массив маркеров в вашем коде и вставить каждый созданный маркер в этот массив

// global
var markers = [];

// after created
markers.push(marker);
...