【发布时间】:2011-07-11 14:53:12
【问题描述】:
在 onCreate() 中硬编码 setZoom() 感觉非常陈旧,我想通过最初让 MapView 设置缩放直到所有 GeoPoints / OverlayItems 在地图上可见来增强用户体验。
这怎么能自动完成?
【问题讨论】:
标签: android gps android-mapview
在 onCreate() 中硬编码 setZoom() 感觉非常陈旧,我想通过最初让 MapView 设置缩放直到所有 GeoPoints / OverlayItems 在地图上可见来增强用户体验。
这怎么能自动完成?
【问题讨论】:
标签: android gps android-mapview
有点像这样
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));
没有什么神奇的方法可以实现这一点。我建议遍历所有覆盖项以获得所有这些项目的中心和跨度。然后为地图相应地设置中心和跨度
【讨论】: