Получение уровня масштабирования карты для заданных границ на Android, как в JS Google Maps API: map.getBoundsZoomLevel (границы) - PullRequest
7 голосов
/ 12 февраля 2011

У меня есть кластерный маркер, который определяет ограничивающий прямоугольник, содержащий группу маркеров. Кластер имеет центр (широта, долгота), количество маркеров и широту и долготу для расчета границ.

В Google Maps API (JS) есть функция getBoundsZoomLevel (bounds), но я не могу найти эквивалентный метод в Google Maps SDK для Android. Как я могу оценить уровень масштабирования для заданных границ (особенно на разных устройствах с разным разрешением / плотностью)?

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

У кого-нибудь есть рабочий фрагмент кода или какие-нибудь предложения для меня?

Заранее спасибо С уважением Торстен.

Ответы [ 3 ]

11 голосов
/ 02 марта 2011

Спасибо за ответ, Солвек. Тем временем я нашел решение, которое немного адаптировал, и оно работает. Метод вычисляет границы набора географических точек, вычисляет диапазон этих точек и, наконец, использует zoomToSpan и animateTo для увеличения и центрирования данной области:

 public static void zoomInBounds(final MapView view, final GeoPoint.. bounds) {

    int minLat = Integer.MAX_VALUE;
    int minLong = Integer.MAX_VALUE;
    int maxLat = Integer.MIN_VALUE;
    int maxLong = Integer.MIN_VALUE;

    for (GeoPoint point : bounds) {
        minLat = Math.min(point.getLatitudeE6(), minLat);
        minLong = Math.min(point.getLongitudeE6(), minLong);
        maxLat = Math.max(point.getLatitudeE6(), maxLat);
        maxLong = Math.max(point.getLongitudeE6(), maxLong);
    }

    final MapController controller = view.getController();
    controller.zoomToSpan(
                       Math.abs(minLat - maxLat), Math.abs(minLong - maxLong));
    controller.animateTo(new GeoPoint((maxLat + minLat) / 2,
        (maxLong + minLong) / 2));
}
1 голос
/ 01 декабря 2015

Теперь вы можете увеличивать границы с помощью .newLatLngBounds () method:

map.animateCamera(CameraUpdateFactory.newLatLngBounds(place.getViewport(), 10)); // 10 is padding

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

0 голосов
/ 01 марта 2011

Я не пробовал это, но, возможно, это будет работать для вас. Представьте, что у вас есть прямоугольник (x1, y1) - (x2, y2)

    MapController c = mapView.getController();
    c.setCenter(new GeoPoint((x1+x2)/2,(y1+y2)/2));
    c.zoomToSpan(x2, y2);
...