Ответ 1
Призыв к fitBounds() увеличит масштаб до самого маленького уровня масштабирования, который полностью содержит границы. Если бы вы увеличили еще один уровень масштабирования, радиус не был бы полностью включен в карту.
Я создал карту, в которой пользователь вводит zipcode и радиус (мили), и я хочу, чтобы карта была сосредоточена на точке, созданной из zipcode, и отображала (примерно) область, которая была бы в пределах этого радиуса. Я создаю круг с радиусом и пытаюсь привязать карту к этому кругу. Сейчас он правильно центрируется, но отображаемая область больше, чем заданный радиус.
me.center_map = function(latlng, r)
{
// latlng is the point of the zipcode
var circ = new google.maps.Circle();
circ.setRadius(r * 1609.0);
circ.setCenter(latlng);
map.setCenter(latlng);
map.fitBounds(circ.getBounds());
// updates markers
google.maps.event.trigger(map,'dragend');
};
РЕДАКТИРОВАТЬ: Нарисовал круг, который я использую. В идеале карта будет увеличена до области в радиусе.
Призыв к fitBounds() увеличит масштаб до самого маленького уровня масштабирования, который полностью содержит границы. Если бы вы увеличили еще один уровень масштабирования, радиус не был бы полностью включен в карту.
map.setZoom(map.getZoom() + 1);
Это, конечно, зависит от того, насколько хорош конкретный радиус (в случае, если он не всегда один и тот же)
Чтобы отобразить область внутри круга, нужно было бы построить прямоугольник с угловыми углами по периметру круга и подогнать к нему окно просмотра карты.
например. рисование видимого круга и прозрачный прямоугольник с той же центральной точкой должны работать, как описано op.
С июня 2017 года метод fitBounds имеет второй параметр, который представляет размер заполнения. Для тех, кто хочет удалить его, вам просто нужно пройти 0.
Map.map.fitBounds(bounds, 0);
Новая сигнатура метода:
fitBounds(bounds:LatLngBounds|LatLngBoundsLiteral, padding?:number)