【问题标题】:Android MapView -setting zoom automatically until all ItemizedOverlay's are visibleAndroid MapView - 自动设置缩放,直到所有 ItemizedOverlay 都可见
【发布时间】:2011-07-11 14:53:12
【问题描述】:

在 onCreate() 中硬编码 setZoom() 感觉非常陈旧,我想通过最初让 MapView 设置缩放直到所有 GeoPoints / OverlayItems 在地图上可见来增强用户体验。

这怎么能自动完成?

【问题讨论】:

    标签: android gps android-mapview


    【解决方案1】:

    有点像这样

    int minLat = Integer.MAX_VALUE;
    int maxLat = Integer.MIN_VALUE;
    int minLon = Integer.MAX_VALUE;
    int maxLon = Integer.MIN_VALUE;
    
    for (GeoPoint item : items) 
    { 
    
          int lat = item.getLatitudeE6();
          int lon = item.getLongitudeE6();
    
          maxLat = Math.max(lat, maxLat);
          minLat = Math.min(lat, minLat);
          maxLon = Math.max(lon, maxLon);
          minLon = Math.min(lon, minLon);
     }
    
    mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon));
    mapController.animateTo(new GeoPoint( (maxLat + minLat)/2, 
    (maxLon + minLon)/2 )); 
    

    edit:Ryan 提出了一个很好的建议:放置一个填充物,这样一些点就不会位于边缘(感谢 Ryan!)

    double fitFactor = 1.5;
    mapController.zoomToSpan((int) (Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor));
    

    【讨论】:

    • 我将它用于两个地理点,我的位置和一个兴趣点,我注意到有时叠加层非常靠近屏幕边缘。为了解决这个问题,我在mapController.zoomToSpan((int) Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor)); 中添加了一个double fitFactor = 1.5,它添加了一个很好的填充。
    • 很好的答案。编辑后的最后一行少了一个(应该是:mapController.zoomToSpan((int)(Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor));
    • 它还可以包含一个检查,即项目列表不应为空,否则地图会缩放到 1 级。对我来说,它适用于大多数情况。
    • 感谢 Reno 的回答,感谢 Ryan 的改进点。
    【解决方案2】:

    没有什么神奇的方法可以实现这一点。我建议遍历所有覆盖项以获得所有这些项目的中心和跨度。然后为地图相应地设置中心和跨度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-05
      • 2011-10-14
      • 2010-10-04
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 2011-09-20
      • 2012-09-12
      相关资源
      最近更新 更多