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
};
Ответы
Ответ 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 не всегда обеспечивает точку в пределах полилинии. Похоже, что используемый алгоритм прост. Я пытаюсь найти решение и опубликую его здесь, если найденный.