2013-03-27 6 views
6

マップを特定の境界ボックスにズームするには、zoomToBoundingBoxメソッドを使用します。
方法は、私がこれを見つけたmapView.javaのソースコードでは、ズームレベル0zoom map osmdroidの特定の境界ボックスに表示

に地図を表示するが、何もしません:

/** *指定されたバウンディングボックスを囲むようにマップをズーム、できるだけ近づけてください。表示レイアウトが完了した後 *を呼び出す必要があり、または画面寸法が知られていない、と *は常にズームレベルの中央にズームします0 *提案:チェックgetScreenRect(ヌル).getHeight()> 0 */

getScreenRect(null).getHeight() > 0をチェックしたところ、私に間違いがあります。

プログラムで表示レイアウトを完成させるにはどうすればよいですか?
上記の述語が私に当てはまるように私は何ができますか?

答えて

2

私は同じ問題がありました。私はonLayout()メソッドの終わりにzoomToBoundingBox()を呼び出すことでそれに対処しました。

マップライブラリの選択から私を保護するために使用する独自のMapViewサブクラスがあります。このクラスには、clearPoints/addPoint/layoutPointsスタイルのインターフェイスがあります。 layoutPoints()メソッド内で、ポイントのコレクションからアイテム化されたオーバーレイを作成し、クラスのインスタンスメソッドに格納されているバウンディングボックスを作成します。

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; 

マイonLayout()のオーバーライドがあります

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

(除いて、私は、これはそれを行うための最善の方法であるかどうかわからないんだけど、私のために働くようですズームが少し遠すぎるように見えますが、別の問題です)。

+0

これを試したが、MyMapViewでビューを作成できないmapView =(MapView)findViewById(R.id.mapview); – thanasio2

+0

は、layout.xmlファイルやビューの作成方法に影響しますか?私が行う場合:mapView =(MyMapView)findViewById(R.id.mapview);それはキャストを実行することを拒否し、クラッシュ... !!! – thanasio2

+0

マップビュー(実際には私のビューすべて)をプログラムで作成します。右のコンストラクタで "MyMapView"を定義して、IDEがMyMapViewをXML内に作成できるようにする方法があると思います。しかし、それは何年も前に読んでいた「Androidで最初に始めたときには」ぼんやりしているからです。 – Colin

関連する問題