我有一个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 problem和Calculating zoomToSpan() degrees based on min/max lat/lng to be in the mapView。
答案 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的幂次数逐步变化(不是渐进式),这意味着它会使变焦加倍,或者缩小到一半。获得的最终结果将随地图中的不同点而变化,这些点可以与缩放值紧密匹配,并且与前一个边缘的距离非常远。