Android MapView – 自动缩放,直到所有的ItemizedOverlay都可见

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

这怎么能自动神奇地完成?

有点像这样

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:瑞安给了一个很好的build议:把填充,使一些点不要躺在边缘(谢谢瑞安!)

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

没有不可思议的方法来实现这一点。 我build议遍历所有overlayitems以获得所有这些项目的中心和跨度。 然后为地图设置相应的中心和跨度