Android MapView - 自动设置缩放,直到所有 ItemizedOverlay 都可见
Posted
技术标签:
【中文标题】Android MapView - 自动设置缩放,直到所有 ItemizedOverlay 都可见【英文标题】:Android MapView -setting zoom automatically until all ItemizedOverlay's are visible 【发布时间】:2011-07-11 14:53:12 【问题描述】:在 onCreate() 中硬编码 setZoom() 感觉非常陈旧,我想通过最初让 MapView 设置缩放直到所有 GeoPoints / OverlayItems 在地图上可见来增强用户体验。
这怎么能自动完成?
【问题讨论】:
【参考方案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】:
没有什么神奇的方法可以实现这一点。我建议遍历所有覆盖项以获得所有这些项目的中心和跨度。然后为地图相应地设置中心和跨度
【讨论】:
以上是关于Android MapView - 自动设置缩放,直到所有 ItemizedOverlay 都可见的主要内容,如果未能解决你的问题,请参考以下文章