Google Maps API v3: подгонка карты к маркерам при сохранении фиксированной центральной точки - PullRequest
1 голос
/ 01 февраля 2012

У меня есть следующий код для добавления списка маркеров на мою карту и автоматического подбора границ:

var fitToMarkers = function(markers) {
    var bounds = new google.maps.LatLngBounds();
    var length = markers.length;
    for (var i = 0; i < length; i++) {
        bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lng));
        map.fitBounds(bounds);
    }
};

Но то, что я действительно хочу сделать, это сначала центрировать карту на другом объекте Marker или LatLng, ТО добавить список маркеров на карту и автоматически уменьшать масштаб карты (сохраняя исходную центральную точку), пока она не уместится. весь список маркеров.

Спасибо!

Ответы [ 3 ]

1 голос
/ 14 июня 2012

Возможно, не очень эффективно, но ...

Вы можете рекурсивно уменьшать масштаб, проверяя, каждый раз, когда широта Lat находится в пределах карты,

// keep zooming out until map contains cords 
function zoomOut(bounds, latlng, currentZoom) {
    if (!bounds.contains(latlng)) {
        var newZoom = currentZoom - 1;
        map.setZoom(newZoom);
        zoomOut(map.getBounds(), latlng, newZoom);
    }   
}

var fitToMarkers = function(markers) {
    var length = markers.length;
    for (var i = 0; i < length; i++) {
         var latlng = new google.maps.LatLng(markers[i].lat, markers[i].lng)
         zoomOut(map.getBounds(), latlng, map.getZoom());
    }
};
1 голос
/ 11 февраля 2012

bounds.extend делает большую часть работы за вас. После того, как все ваши маркеры будут добавлены, вы получите LatLngBounds, который охватывает все ваши очки. Вы сможете использовать getNorthEast () и getSouthWest (), чтобы получить углы для этого поля. С вашим оригинальным центром вы сможете рассчитать следующее

1) Самая дальняя точка от центра по оси x 2) Самая дальняя точка от центра вдоль оси y

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

map.fitОграничения для вас должны выполнить то, что вы ищете.

0 голосов
/ 20 июня 2012

Эта строка

bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lng);

требуется дополнительный ')' в конце:

bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lng));
...