Android MapView -setting zoom automatically until all ItemizedOverlay's are visible

前端 未结 2 1151
忘掉有多难
忘掉有多难 2020-11-28 22:21

hard-coding the setZoom() within onCreate() feels very antiquated and I\'d like to enhance the user experience by initially having the MapView set the zoom until all GeoPoin

相关标签:
2条回答
  • 2020-11-28 22:56

    There's no magical way to achieve this. I suggest to iterate through all your overlayitems to obtain the center and span of all these items. Then set the center and span accordingly for the map

    0 讨论(0)
  • 2020-11-28 23:09

    Kinda like this

    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 gave a nice suggestion : to put a padding so that some of the point don't lie on the edges (thanks Ryan!)

    double fitFactor = 1.5;
    mapController.zoomToSpan((int) (Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor));
    
    0 讨论(0)
提交回复
热议问题