Android: установка уровня масштабирования в Google Maps для включения всех точек маркера

Я пытаюсь установить уровень масштабирования для карт в android, чтобы он включал все точки в моем списке. Я использую следующий код.

int minLatitude = Integer.MAX_VALUE;
int maxLatitude = Integer.MIN_VALUE;
int minLongitude = Integer.MAX_VALUE;
int maxLongitude = Integer.MIN_VALUE;

// Find the boundaries of the item set
// item contains a list of GeoPoints
for (GeoPoint item : items) { 
    int lat = item.getLatitudeE6();
    int lon = item.getLongitudeE6();

    maxLatitude = Math.max(lat, maxLatitude);
    minLatitude = Math.min(lat, minLatitude);
    maxLongitude = Math.max(lon, maxLongitude);
    minLongitude = Math.min(lon, minLongitude);
}
objMapController.zoomToSpan(
    Math.abs(maxLatitude - minLatitude), 
    Math.abs(maxLongitude - minLongitude));

это работает иногда. Однако иногда некоторые точки не отображаются, и мне нужно затем уменьшить масштаб, чтобы просмотреть эти точки. Есть ли способ решить эту проблему?

3 ответов


еще один подход с Android Map API v2:

private void fixZoom() {
    List<LatLng> points = route.getPoints(); // route is instance of PolylineOptions 

    LatLngBounds.Builder bc = new LatLngBounds.Builder();

    for (LatLng item : points) {
        bc.include(item);
    }

    map.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), 50));
}

Я сам узнал ответ, уровень масштабирования был правильным. Мне нужно добавить следующий код, чтобы отобразить все точки на экране.

objMapController.animateTo(new GeoPoint( 
    (maxLatitude + minLatitude)/2, 
    (maxLongitude + minLongitude)/2 )); 

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


частью проблемы может быть то, что MIN_VALUE по-прежнему является положительным числом, но широты и долготы могут быть отрицательными числами. Попробуйте использовать NEGATIVE_INFINITY вместо MIN_VALUE.