我有一个MapView,并在其上调用getController()。zoomToSpan()。我与zoomToSpan()的问题在于,我希望在地图图钉之外具有一致的填充(例如15dp),以便可以选择它们而无需用户捏来缩小。目前,我正在使用地图针的最小/最大长/纬度填充zoomToSpan(),因此边缘上的那些不是立即可见或可选的。

我已经考虑过使用固定的长/纬距填充,但是我无法保证地图图钉不会过分靠近或远离。因此,尽管固定的长/纬距填充可能在大多数情况下都适用,但并非在所有情况下都适用。

这是我当前设置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

最佳答案

您的解决方案应该可以正常工作。只需注意您在“((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的幂次变化(不是渐进式),这意味着它将放大两倍或减小一半。最终结果将随地图中的不同点而变化,这些点可以与缩放值紧密匹配,并且与上一个边缘的距离非常远。

关于java - 向MapViewController.zoomToSpan()添加填充,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12693370/

10-11 20:17