Сосредоточьте карты Google на географических точках и соответствующим образом увеличьте масштаб.

Я хотел бы передать x количество географических местоположений в API Карт Google и сосредоточить его вокруг этих местоположений и установить соответствующий уровень масштабирования, чтобы все местоположения были видны на карте. Т.е. показать все маркеры, которые в данный момент находятся на карте.

Возможно ли это с тем, что API Карт Google предлагает по умолчанию, или мне нужно решить, чтобы создать это самостоятельно?


person Luke    schedule 27.11.2008    source источник


Ответы (4)


Есть несколько способов сделать это, но это довольно просто, если вы используете V2 API. См. этот публикацию для примера, это сообщение группы или этот пост.

person carson    schedule 27.11.2008
comment
Обратите внимание, что в первой ссылке упоминается, что getBoundsZoomLevel() недокументирован - это уже не так. Я реализовал что-то похожее для своего проекта, он работает хорошо, за исключением того, что тогда я хотел бы знать о GBounds.extend()! - person matt b; 27.11.2008

Я использовал fitBounds (API V3). для каждой точки:

  1. Объявите переменную.

    var bounds = new google.maps.LatLngBounds();
    
  2. Пройдите через каждый маркер с циклом FOR

    for (i = 0; i < markers.length; i++) {
        var latlng = new google.maps.LatLng(markers[i].lat, markers[i].lng);
        bounds.extend(latlng);
    }
    
  3. Наконец позвоните

    map.fitBounds(bounds);
    
person gray    schedule 29.09.2010
comment
@camelCase: зависит от вашего мастерства, +1 именно то, что я искал - person Moak; 15.03.2011
comment
@Moak, вы можете добавить maxZoom к объекту карты, чтобы предотвратить слишком близкое масштабирование! - person joetsuihk; 04.05.2011

Для V3 есть zoomToMarkers.

person Andrew    schedule 09.10.2009

Идея Грея великолепна, но не работает как есть. Мне пришлось придумать хак для zoomToMarkers API V3:

function zoomToMarkers(map, markers)
{
    if(markers[0]) // make sure at least one marker is there
    {
        // Get LatLng of the first marker
        var tempmark =markers[0].getPosition();

        // LatLngBounds needs two LatLng objects to be constructed
        var bounds = new google.maps.LatLngBounds(tempmark,tempmark);

        // loop thru all markers and extend the LatLngBounds object
        for (var i = 0; i < markers.length; i++) 
        {
            bounds.extend(markers[i].getPosition());
        }

        // Set the map viewport 
        map.fitBounds(bounds);
    }

}
person Nasser Al-Wohaibi    schedule 17.04.2012