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 都可见的主要内容,如果未能解决你的问题,请参考以下文章

如何自动缩放mapView以显示覆盖

如何在'mapview'上设置合适的缩放级别?

Android OSM 机器人 - 设置最大缩放级别

关于android上谷歌地图的缩放事件

如何在 android 的 MapView 中更改地图控制器的位置?

如何在 Android 的 MapView 中更新当前位置的蓝点标记