2013-03-27 27 views
6

Bir haritayı belirli bir sınırlayıcı kutuya yakınlaştırmak için zoomToBoundingBox yöntemini kullanmak istiyorum.
yöntem bunu buldum mapView.java kaynak kodunda yakınlaştırma düzeyinde 0.zoom map osmdroid üzerindeki belirli bir sınırlayıcı kutuya bakın

haritayı göstermek başka bir şey yapar:

/** * Belirtilen sınırlayıcı kutu içine alın haritaya zum , mümkün olduğunca yakın. Ekran düzeni tamamlandıktan sonra * çağrılmış olmalıdır veya ekran boyutları bilinmeyen ve * daima yakınlaştırma düzeyine merkezine yakınlaştırır 0. * Öneri: Check getScreenRect (null) .getHeight()> 0 */

getScreenRect(null).getHeight() > 0'u kontrol ettim ve bana yanlış veriyor.

Ekran düzenini program aracılığıyla nasıl tamamlıyorsunuz?
Yukarıdaki yüklemenin bana doğru olmasını sağlayacak şekilde neler yapabilirim?

cevap

2

Aynı problem vardı. OnLayout() yönteminin sonundaki zoomToBoundingBox() çağrısını çağırarak bunu çözdüm.

Harita kütüphanesi seçiminden beni yalıtmak için kullandığım kendi MapView alt sınıfım var. Bu sınıf, bir clearPoints/addPoint/layoutPoints arabirim stiline sahiptir. LayoutPoints() yönteminde, noktaların oluşturulmasından ötelenmiş kaplama yerleşimini oluşturuyorum ve sınıfın bir örnek yönteminde depolanan sınırlayıcı kutuyu oluşturuyorum. hariç (

/* (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); 
    } 
} 

bu bunu yapmanın en iyi yolu olup olmadığından emin değilim, ama benim için iş gibi görünüyor:

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; 

Benim onLayout() geçersiz kılma vardır zumun biraz uzak olduğu anlaşılıyor, ama bu başka bir zaman için başka bir sorun.

+0

bunu denedi, ama MyMapView ile görünümü oluşturamaz mapView = (MapView) findViewById (R.id.mapview); – thanasio2

+0

, bunun layout.xml dosyası üzerinde veya görünümü oluşturmanın yolu üzerinde herhangi bir etkisi var mı? eğer yaparsam: mapView = (MyMapView) findViewById (R.id.mapview); cast ve crashes yapmayı reddediyor ... !!! – thanasio2

+0

Harita görünümümü (aslında tüm görünümlerim) program aracılığıyla oluşturuyorum. IDE'nin daha sonra XML içinde bir MyMapView oluşturabilmesi için "MyMapView" ı doğru yapıcılarla tanımlamanın bir yolu olduğunu düşünüyorum. Ancak bu, "yıllar önce Android'de başladığım zaman" pusluydu. – Colin