2010-08-26 41 views

Trả lời

10

tôi đã sử dụng phương pháp này trong một dự án gần đây của tôi

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

Về cơ bản nó chỉ thấy giới hạn của một hộp và đặt chế độ xem để một trong những gần gũi nhất mà bao gồm các giới hạn

+0

MapStoresController được xác định ở đâu? Tôi không thể tìm thấy tài liệu tham khảo của nó, nó là một phần của bản đồ google api? – ala

+1

Đó là điều tôi đã tự thực hiện. Thuộc tính MAP_SCALE được định nghĩa là: public static final int MAP_SCALE = (int) 1E6; –

+0

Giải pháp của Schwiz dưới đây tốt hơn là –

26

này là dễ dàng hơn nhiều giải pháp nếu bạn đang sử dụng ItemizedOverlay

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

nơi để gọi chức năng này? – Krishnabhadra

+0

bất cứ khi nào bạn thêm lớp phủ khác, tôi đoán hoặc nếu có nút thu phóng cho vừa. Thực sự là một câu hỏi thiết kế mà bạn có. – schwiz

Các vấn đề liên quan