2013-03-27 43 views
6

Chcę użyć metody zoomToBoundingBox do powiększenia mapy do określonego obwiedni.
Metoda robi nic oprócz wyświetlania mapy na poziomie powiększenia 0.powiększ mapView do pewnej obwiedni na osmdroidie

W kodzie źródłowym mapView.java Znalazłem to:

/** * Powiększ mapę do zamykania określoną obwiednię , tak ściśle jak to możliwe. * Musi być wywołana po zakończeniu układ wyświetlacza, lub wymiary ekranu nie są znane, a * zawsze będzie powiększać do środka poziomu powiększenia 0. * Sugestia: Sprawdź getScreenRect (null) .getHeight()> 0 */

Sprawdziłem getScreenRect(null).getHeight() > 0 i daje mi fałszywe.

W jaki sposób programowo wypełniasz układ ekranu?
Co mogę zrobić, aby powyższy predykat dał mi prawdę?

Odpowiedz

2

Miałem ten sam problem. Zwróciłem się do niego, wywołując wywołanie zoomToBoundingBox() na końcu metody onLayout().

Mam własną podklasę MapView, której używam do izolowania mnie od wyboru biblioteki map. Ta klasa ma interfejs interfejsu clearPoints/addPoint/layoutPoints. Wewnątrz metody layoutPoints() tworzę wyodrębnioną nakładkę z kolekcji punktów i tworzę ramkę ograniczającą, która jest przechowywana w metodzie instancji klasy.

public class MyMapView extends MapView { 

// The bounding box around all map points 
// Used to determine the correct zoom level to show everything 
private int minLat = Integer.MAX_VALUE; 
private int minLon = Integer.MAX_VALUE; 
private int maxLat = Integer.MIN_VALUE; 
private int maxLon = Integer.MIN_VALUE; 

private BoundingBoxE6 boundingBox; 

My onLayout() przesłanianie posiada:

/* (non-Javadoc) 
* @see org.osmdroid.views.MapView#onLayout(boolean, int, int, int, int) 
*/ 
@Override 
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 
    super.onLayout(arg0, arg1, arg2, arg3, arg4); 

    // Now that we have laid out the map view, 
    // zoom to any bounding box 
    if (this.boundingBox != null) { 
     this.zoomToBoundingBox(this.boundingBox); 
    } 
} 

Nie jestem pewien, czy jest to najlepszy sposób to zrobić, ale wydaje się, aby pracować dla mnie (z wyjątkiem że zoom wydaje się być trochę za daleko, ale to kolejny problem na inny czas).

+0

próbował tego, ale nie może utworzyć widoku z MyMapView mapView = (MapView) findViewById (R.id.mapview); – thanasio2

+0

ma to jakiegokolwiek wpływu na plik layout.xml lub sposób tworzenia widoku? jeśli to zrobię: mapView = (MyMapView) findViewById (R.id.mapview); odmawia wykonania obsady i awarii ... !!! – thanasio2

+0

Programowo tworzę mój widok mapy (właściwie wszystkie moje widoki). Myślę, że istnieje sposób na zdefiniowanie "MyMapView" z odpowiednimi konstruktorami, aby IDE mógł następnie utworzyć MyMapView w XML. Ale to jest z mglistego "kiedy zacząłem na Androida" czytającego wiele lat temu. – Colin