Подтвердить что ты не робот

API Карт Google: вычисление центра/масштабирования полилинии

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

В настоящее время я просто использую первые координаты из наложения, но это действительно не представляет собой центр наложения. Поэтому, когда я загружаю карту, она не сосредоточена на наложении.

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

var latlng = new google.maps.LatLng(38.269239, -122.276010);
    var myOptions = {
        zoom: 15,//Calculate this somehow?
        center: latlng,// Calculate value from array of coordinates?
        mapTypeId: google.maps.MapTypeId.HYBRID
    };
4b9b3361

Ответ 1

Если у вас есть список координат, вы можете их перебрать и добавить в объект LatLngBounds. Вот пример для V3 API, но концепция в V2 аналогична:

var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < coordinates.length; i++) {
  bounds.extend(coordinates[i]);
}

После этого вы можете получить центр с помощью:

bounds.getCenter();

Или, альтернативно, вы можете напрямую вызвать map.fitBounds(), который будет центрировать карту по центру границ и отрегулировать масштаб, так что все границы будут точно вписаны в порт представления.

map.fitBounds(bounds);

Ответ 2

Основываясь на @tux21b,

      var bounds = new google.maps.LatLngBounds();
      polyline.getPath().forEach(function(e){//can't do polyline.getPath()[i] because it a MVCArray
          bounds.extend(e);
      })         
      _map.fitBounds(bounds);

Ответ 3

Функция getCenter для LatLngBounds не всегда обеспечивает точку в пределах полилинии. Похоже, что используемый алгоритм прост. Я пытаюсь найти решение и опубликую его здесь, если найденный.