Получение границ полилинии в Google Maps API v3


Есть ли простые способы найти ограничивающую рамку полилинии с помощью Google Maps API v3? Я работаю над проектом, где мне нужно обновить границы по мере добавления и удаления данных с карты. Это довольно легко, просто делая bd.extend(точка), где bd-Связанный объект, а point-объект LatLng. Проблема в том, что когда я начинаю удалять данные, я бы хотел, чтобы они изменили границы и увеличили масштаб. Есть ли встроенные функции, которые могут это сделать, или мне нужно будет что-то написать для я сам?

3 5

3 ответа:

API v2 имел GPolyline.getBounds() метод, чтобы сделать именно это. Однако оказывается, что в V3 API нет эквивалентного метода.

Возможно, вы захотите справиться с этим, переопределив changed собственность вашего Polyline MVCObject для того, чтобы получать уведомления, когда объект меняет состояние. Затем вы можете вычислить ограничивающую рамку, используя LatLngBounds.extend() метод, который вы предложили.

Я думаю, что Google намеренно опустил такие методы из API v3 в попытайтесь сохранить API легким. Аналогичное упущение , обсуждавшееся пару дней назад в Stack Overflow , было следующим:GMap2.clearOverlays() метод.

Расширяя решение oenpelli, это расширенный метод getBounds (), который я использую для воссоздания функциональности из API V2. Это прекрасно работает в моем проекте.

google.maps.Polyline.prototype.getBounds = function() {
    var bounds = new google.maps.LatLngBounds();
    this.getPath().forEach(function(item, index) {
        bounds.extend(new google.maps.LatLng(item.lat(), item.lng()));
    });
    return bounds;
};

Просто помните, что это должно быть добавлено после загрузки API javascript, поэтому в вашем методе init.

Вы также можете расширить класс Polyline, чтобы добавить свой собственный метод getBounds. Обратитесь к карты Google API для В3: добавить точку на полилинии между двумя существующими точками на кнопку полилинии событие, как это сделать.