У меня есть карта с кучей точек на ней, и я хочу увеличить масштаб так, чтобы все точки помещались на экране.Код для этого довольно прост:
var bounds = new GLatLngBounds();
for (var n = 0; n < points.length; n++) {
bounds.extend(points[n].getLatLng());
}
zoomLevel = map.getBoundsZoomLevel(bounds);
, чтобы получить уровень масштабирования, вы должны передать объект bounds.Чтобы создать объект bounds, вы либо назначаете ему две точки, например, прямоугольник, либо передаете ему точку, и ее размер увеличивается (при необходимости) для включения точки, как я и делал выше.
Проблемаявляется то, что точки появляются прямо на краю экрана.Я хотел бы увеличить размер границ, скажем, на 10%.Я могу получить две точки из моего объекта границ, используя bounds.getNorthEast();
и bounds.getSouthWest();
, но увеличить их на 10% от размера границ оказывается сложно.Я попробовал toSpan()
на границах, которые дают вам LatLng, содержащий размер границ, а затем сделал 10% от Lat и Lng и добавил его к моим координатам.Тем не менее, это не похоже на работу.Мой код для этой попытки был:
var pointNorthEast = bounds.getNorthEast();
var pointSouthWest = bounds.getSouthWest();
var latAdjustment = ((pointNorthEast.lat() - pointSouthWest.lat()) * increasePercentage) / 2;
var lngAdjustment = ((pointNorthEast.lng() - pointSouthWest.lng()) * increasePercentage) / 2;
var newPointNorthEast = new GLatLng(pointNorthEast.lat() + latAdjustment, pointNorthEast.lng() + lngAdjustment);
var newPointSouthWest = new GLatLng(pointSouthWest.lat() - latAdjustment, pointSouthWest.lng() - lngAdjustment);
bounds = new GLatLngBounds();
bounds.extend(newPointNorthEast);
bounds.extend(newPointSouthWest);
По моим расчетам, границы должны быть на 10% больше.Я не уверен, что он представляет собой просто прямоугольник или хранит какие-либо данные координат, или нет, поэтому я не рискнул, добавив / вычтя половину увеличения с каждой стороны, чтобы сохранить его в центре.
Однако, пытаясь различнымиПри увеличении значений в процентах, таких как 1.1 или 1.5, это не имеет значения.
Поэтому я либо перепутал свою логику, свою математику, либо тот факт, что zoomLevel не является плавной шкалой, мешает моим попыткам.
Я думаю, что мне, возможно, придется просто сделать zoomLevel -= 1
и покончить с этим, но я хотел посмотреть, есть ли у кого-нибудь сначала какие-нибудь идеи.