2010-08-26 2 views
6

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

+0

Ссылка мертва. Пожалуйста, обновите его. – JHHoang

+0

удалена мертвая ссылка – Siddharth

ответ

10

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

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)); 
} 

В основном это просто находит пределы коробки и устанавливает вид на ближайший друг, который охватывает границы

+0

где определяется MapStoresController? Я не могу найти его ссылку, это часть google map api? – ala

+1

Это то, что я реализовал сам. Свойство MAP_SCALE определяется как: public static final int MAP_SCALE = (int) 1E6; –

+0

Решение Schwiz ниже намного лучше –

26

это гораздо проще если вы используете ItemizedOverlay

public void fitOverlays() { 
     mMapView.getController().zoomToSpan(mItemizedOverlay.getLatSpanE6(), mItemizedOverlay.getLonSpanE6()); 
} 
+0

, где назвать эту функцию? – Krishnabhadra

+0

всякий раз, когда вы добавляете больше оверлеев, я думаю, или если есть кнопка масштабирования, чтобы установить ее. На самом деле вопрос дизайна у вас есть. – schwiz

Смежные вопросы