2017-01-05 8 views
1

я последовал примеру здесь: How to set screen zoom by geopoints?OSM MAPview: Показать все geopoints из GeoTracking на экране

Но моя проблема в том, что мой маршрут очень мал в MapView. Он должен заканчиваться вблизи границ.

Вот как это выглядит на код ниже:

this is how it looks with the code below

private void centerMap(ArrayList<GeoPoint> waypoints) { 
    GeoPoint[] geoPoints = new GeoPoint[waypoints.size()]; 
    for(int i = 0; i<waypoints.size(); i++) { 
     geoPoints[i] = waypoints.get(i); 
    } 

    int minLat = Integer.MAX_VALUE; 
    int maxLat = Integer.MIN_VALUE; 
    int minLon = Integer.MAX_VALUE; 
    int maxLon = Integer.MIN_VALUE; 

    //for (Point point : twoPoints) { 
    for(GeoPoint point: geoPoints){ 
     int lat = (int) (point.getLatitude() * 1E6); 
     int lon = (int) (point.getLongitude() * 1E6); 

     maxLat = Math.max(lat, maxLat); 
     minLat = Math.min(lat, minLat); 
     maxLon = Math.max(lon, maxLon); 
     minLon = Math.min(lon, minLon); 
    } 

    mapView.getController().zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon)); 
    mapView.getController().setCenter(new GeoPoint((maxLat + minLat)/2, (maxLon + minLon)/2)); 
} 
+0

Остерегайтесь того, что '(maxLat + minLat)/2' может переполняться. Вместо этого используйте 'maxLat - (maxLat - minLat)/2'. То же самое относится к долготе. – scai

ответ

0
private void centerMap(ArrayList<GeoPoint> waypoints) { 
    BoundingBox bb = BoundingBox.fromGeoPoints(waypoints); 
    mapView.zoomToBoundingBox(bb); 
} 

И обратите внимание, что значения LAT/LON теперь дважды по умолчанию в osmdroid.

+0

thanx для вашего ответа. Но в моем приложении есть та же проблема со шкалой. Сделайте это в своем приложении? – Anna

+0

Да, он работает до тех пор, пока вы используете его, когда карта уже отображается = не работает во время onCreate. – MKer