Карты Google для Android масштабируются, чтобы соответствовать метке и текущему положению

Я пытаюсь создать пользовательскую кнопку «Мое местоположение» для своего приложения с помощью Google Maps.

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

Я не смог найти, как здесь работает переменная zoom. Если я знаю, что маркер, который я хочу показать, находится на расстоянии 0,5 единицы GPS от меня, как я могу центрировать карту вокруг меня таким образом, чтобы этот маркер включался в его границы? Я бы также использовал отступ, чтобы убедиться, что он идеально вписывается в карту.

LatLng my_coordinates = ...;
LatLng closest_mark = ...;

map.animateCamera(CameraUpdateFactory.newLatLng(my_coordinates));

Итак, теперь я хочу изменить этот код, чтобы не только центрировать позицию на my_coordinates, но и убедиться, что масштабирование сделает closest_mark подходящим в окне просмотра.

CameraUpdateFactory.newLatLngBounds( ?? , /*padding*/);

person Sam Mendez    schedule 12.04.2013    source источник


Ответы (1)


Я не думаю, что в API есть определенная переменная масштабирования, которой вы можете управлять вместе с точками на карте. (А LatLngBounds просто принимает верхнюю правую и нижнюю левую границы и соответственно дает вам представление).

Я считаю, что вы могли бы сделать с немного геометрии. Если ваш маркер находится очень близко к вашему местоположению (вы можете считать его прямоугольником), получите расстояние между ними и экстраполируйте его в противоположном направлении с тем же расстоянием (умножьте на небольшой коэффициент, если вы хотите немного отступа), чтобы получить другие координаты, и тогда вы можете получить верхнюю правую и нижнюю левую координаты (простая геометрия).

Если ваш маркер находится довольно далеко и в кадр попадает поверхность земли, возможно, вам придется использовать формула гаверсинуса (расстояние по большому кругу).

Надеюсь это поможет.

person Guru    schedule 12.04.2013