Android Map Zoom, чтобы показать все контакты - PullRequest
6 голосов
/ 26 августа 2010

У меня есть 5 булавок, добавленных к карте. Как я могу сказать MapView максимально увеличить масштаб и держать все контакты на виду?

Ответы [ 2 ]

26 голосов
/ 28 октября 2010

это гораздо более простое решение, если вы используете ItemizedOverlay

    public void fitOverlays() {
        mMapView.getController().zoomToSpan(mItemizedOverlay.getLatSpanE6(), mItemizedOverlay.getLonSpanE6());
}
10 голосов
/ 26 августа 2010

Я использовал этот метод в моем недавнем проекте

public void centerOverlays() {
    int minLat = 81 * MapStoresController.MAP_SCALE;
    int maxLat = -81 * MapStoresController.MAP_SCALE;
    int minLon = 181 * MapStoresController.MAP_SCALE;
    int maxLon = -181 * MapStoresController.MAP_SCALE;

    for (int i = 0; i < overlayItems.size(); i++) {
        Store s = overlayItems.getItem(i).getStore();
        minLat = (int) ((minLat > (s.getLocation().getLatitude() * MapStoresController.MAP_SCALE)) ? s.getLocation().getLatitude() * MapStoresController.MAP_SCALE :    minLat);
        maxLat = (int) ((maxLat < (s.getLocation().getLatitude() * MapStoresController.MAP_SCALE)) ? s.getLocation().getLatitude() * MapStoresController.MAP_SCALE : maxLat);
        minLon = (int) ((minLon > (s.getLocation().getLongitude() * MapStoresController.MAP_SCALE)) ? s.getLocation().getLongitude() * MapStoresController.MAP_SCALE : minLon);
        maxLon = (int) ((maxLon < (s.getLocation().getLongitude() * MapStoresController.MAP_SCALE)) ? .getLocation().getLongitude() * MapStoresController.MAP_SCALE : maxLon);
    }

    GeoPoint gp = controller.getUserLocation();

    minLat = (minLat > gp.getLatitudeE6()) ? gp.getLatitudeE6() : minLat;
    maxLat = (maxLat < gp.getLatitudeE6()) ? gp.getLatitudeE6() : maxLat;
    minLon = (minLon > gp.getLongitudeE6()) ? gp.getLongitudeE6() : minLon;
    maxLon = (maxLon < gp.getLongitudeE6()) ? gp.getLongitudeE6() : maxLon;

    mapView.getController().zoomToSpan((maxLat - minLat), (maxLon - minLon));
    mapView.getController().animateTo(new GeoPoint((maxLat + minLat) / 2, (maxLon + minLon) / 2));
}

По сути, он просто находит границы поля и устанавливает вид на ближайший, охватывающий границы

...