代码之家  ›  专栏  ›  技术社区  ›  Ian Vink

Android地图缩放以显示所有PIN

  •  6
  • Ian Vink  · 技术社区  · 14 年前

    2 回复  |  直到 12 年前
        1
  •  10
  •   Andrew Burgess    14 年前

    我在最近的一个项目中使用了这种方法

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

    基本上,它只是找到一个框的边界,并将视图设置为包含边界的最近的视图

        2
  •  26
  •   Nathan Schwermann    14 年前

    ItemizedOverlay

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