向MapViewController.zoomToSpan()添加填充

时间:2012-10-02 15:26:06

标签: java android google-maps

我有一个MapView,我在上面调用了getController()。zoomToSpan()。我对zoomToSpan()的问题是我希望在地图引脚之外有一个一致的(例如15dp)填充,这样就可以选择它们而无需用户捏缩小。目前我使用地图引脚的最小/最大长/纬度填充zoomToSpan(),因此边缘上的那些不会立即可见或可选择。

我考虑使用固定的长/ lat填充,但我无法保证地图引脚不会相互靠近或远离彼此。因此,虽然固定的长/纬度填充可能适用于大多数情况,但它并不适用于所有情况。

我正在设置zoomToPan():

mapView.getController().zoomToSpan(MapPoint.convertToGeoPoint(Math.abs(fMinLat - fMaxLat)), MapPoint.convertToGeoPoint(Math.abs(fMinLong - fMaxLong)));

这是我对如何设置它的想法,但我不确定它是否真正解决了问题,或者是否有更好的方法来实现它:

mapView.getController().zoomToSpan(MapPoint.convertToGeoPoint((float) (Math.abs(fMinLat-fMaxLat) + (Math.abs(fMaxLat - fMaxLat)) * 0.5)), MapPoint.convertToGeoPoint((float) (Math.abs(fMinLong-fMaxLong) + (Math.abs(fMinLong - fMaxLong) * 0.5))));

我已经检查了这些问题,但我已经过了使它成功的重点;我只是想完善它:zoomToSpan implementation problemCalculating zoomToSpan() degrees based on min/max lat/lng to be in the mapView

1 个答案:

答案 0 :(得分:1)

您的解决方案应该可以正常运行。请注意,你有一个拼写错误“(Math.abs(fMaxLat - fMaxLat))* 0.5)”。您正在使用两次“fMaxLat”。

你可以用更简单的形式写出来:

mapView.getController().zoomToSpan((int)(Math.abs(fMinLat-fMaxLat) * 1.5), (int)(Math.abs(fMinLong-fMaxLong) * 1.5));

然后你可以尝试1.0和1.99之间的不同乘法值,看看哪些更能达到你的期望。

另请注意,变焦始终会以2的幂次数逐步变化(不是渐进式),这意味着它会使变焦加倍,或者缩小到一半。获得的最终结果将随地图中的不同点而变化,这些点可以与缩放值紧密匹配,并且与前一个边缘的距离非常远。