2011-11-13 15 views
1

マップビューを表示するために私のアプリケーションでosmdroid 3.0.5 jarを使用しています。私は水平線と垂直線からなるオーバーレイを重ねています。特定の場所でのみ、ズームレベルが高いと線の一部が消えて、地図がドラッグされると再び表示されることに気付きました。高いズームレベルでのOsmdroidオーバーレイでの不思議な動作

私は実際のデバイスとエミュレータ(Gingerbread 2.3.3)の両方で問題を示すサンプルアプリケーションを作成しました。

完全なコードは以下の通りである - (彼らはこの最小限のサンプルにあるように表示されませんが、「変換」の方法は、実際のアプリケーションで必要です)。興味深いことに

public class DemoMap extends Activity implements MapViewConstants { 

    private MapView mapView; 
    private MapController mapController; 
    private MapOverlay mmapOverlay = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.copymain); 
     mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setTileSource(TileSourceFactory.MAPNIK); 
     mapView.setBuiltInZoomControls(true); 
     mapView.setMultiTouchControls(true); 
     mapController = mapView.getController(); 
     mapController.setZoom(17); 
     // Only shows the bug at ceratin lat/lon positions, this is one 
     GeoPoint point2 = new GeoPoint(39191699, -120102561); 
     mapController.setCenter(point2); 
     mmapOverlay = new MapOverlay(this); 
     List<Overlay> listOfOverlays = mapView.getOverlays(); 
     listOfOverlays.add(mmapOverlay); 
     mapView.invalidate(); 
    } 

    public class MapOverlay extends org.osmdroid.views.overlay.Overlay { 

     public MapOverlay(Context ctx) {super(ctx); } 

     private int mVpl;// viewport left, top, right, bottom 
     private int mVpt; 
     private int mVpr; 
     private int mVpb; 
     private MapView mMv = null; 

     // Two routines to transform and scale between viewport and mapview 
     private float transformX(float in, MapView mv) { 
      float out; 
      out = ((mVpr - mVpl) * in)/(mv.getRight() - mv.getLeft()) 
        + mVpl; 
      return out; 
     } 

     private float transformY(float in, MapView mv) { 
      float out; 
      out = ((mVpb - mVpt) * in)/(mv.getBottom() - mv.getTop()) 
        + mVpt; 
      return out; 
     } 

     @Override 
     protected void draw(Canvas pC, MapView mapV, boolean shadow) { 
      if (shadow) 
       return; 

      Paint paint; 
      paint = new Paint(); 
      paint.setColor(Color.RED); 
      paint.setAntiAlias(true); 
      paint.setStyle(Style.STROKE); 
      paint.setStrokeWidth(1); 
      paint.setTextAlign(Paint.Align.LEFT); 
      paint.setTextSize(12); 
      final Rect viewportRect = new Rect(); 
      final Projection projection = mapV.getProjection(); 
      viewportRect.set(projection.getScreenRect()); 
      mVpl = viewportRect.left; 
      mVpt = viewportRect.top; 
      mVpr = viewportRect.right; 
      mVpb = viewportRect.bottom; 
      // draw two lines to split screen into 2x2 quarters 
      // drag the map left and right and the vertical line disappears, 
      // then reappears! It's OK at one less zoom level 
      pC.drawLine(transformX(mapV.getWidth()/2, mapV), transformY(0, mapV), 
        transformX(mapV.getWidth()/2, mapV), 
        transformY(mapV.getHeight(), mapV), paint); 

      pC.drawLine(transformX(0, mapV), transformY(mapV.getHeight()/2, mapV), 
        transformX(mapV.getWidth(), mapV), 
        transformY(mapV.getHeight()/2, mapV), paint); 
     } 
    } 
} 

あれば、私の本当でアプリ、オフラインのビットマップに描画を行う場合は、オーバーレイの描画の最後に1つずつ描画します。線は消えません。

ご協力いただければ幸いです。

答えて

1

これは古い質問ですが、あなたが経験していることはIssue 221だと思います。これはバージョン3.0.9で修正されています。

参照:OSMDroid PathOverlay drawing is corrupted at high zoom levels

+0

ありがとうございます。私は新しい瓶を試してみたいと思っていますが、javadocsのjarファイルを入手してEclipseにコンテキストヘルプを与える方法がわかりません。 3.0.7以降は何もないようです。 – NickT

+0

新しいリリースと一緒に新しいjavadocビルドを投稿するべきです。問題報告を追加します。 Mavenを使って自分でビルドすることもできます。 – kurtzmarc

+0

FYI - javadocはMaven Centralからダウンロードできます:http://search.maven.org/#browse%7C-2035155240 – kurtzmarc

1

それがこのバグの別の症状かもしれような音: Issue 207

は、以前のAPIバージョンと同じ動作を参照していますか?

+0

おそらくそれがあります。私はAPI 7エミュレータで試してみたいと思います。 – NickT

+0

API7とOsmdroid 3.0.3を使って再構築し、API 7エミュレータで実行しました。まだ問題は残っています。それらは私が使うことができる最も初期のバージョンです。ビットマップソリューションはうまくいきますが、私はビットマップに関する多くの経験がないので、メモリが漏れてしまうことに常に気をつけています。 – NickT

+0

これは異なるものになります。 – Ifor

関連する問題