2012-04-27 19 views
3

Googleタイルラッパーの例に従って、osmdroid GoogleTilesOverlayを使用してGoogle MapViewを実装しました。安静時osmdroid GoogleTilesOverlayスムーズなサイズ変更

com.google.android.maps.MapView googleMapView; 
    org.osmdroid.google.wrapper.MapView osmdMapView; 
    org.osmdroid.google.overlay.GoogleTilesOverlay tiles; 

    final MapView googleMapView = (com.google.android.maps.MapView.MapView) findViewById(R.id.plan_mapview); 
    osmdMapView = new org.osmdroid.google.wrapper.MapView(gMapView); 

    // snip Provider instantiation etc. 

    overlayTiles = new GoogleTilesOverlay(provider, getApplicationContext()); 
    gMapView.getOverlays().add(overlayTiles); 

ズーム(ピンチまたはコントロール経由)基礎となるGoogleのタイルのサイズを変更してosmdオーバーレイがリサイズされていませんがスムーズに交換されている場合、オーバーレイタイルはしかし、細かいレンダリング。

結果:表示中に残っているタイルを拡大すると、重なりが始まります。逆にズームアウトすると、各タイルの間にギャップが表示されます。

私はdrawT()メソッドを変更できるように、最初のステップはサブクラスGoogleTilesOverlayのようです。しかし、それでは?

私はハードグーグルに向かっていくつかのポインタを見つけた: a)は短絡プロジェクター/行列クラスを使用)する場合、アニメーション Bの真ん中にdraw()メソッドのスケールアウトする方法を決定するために、その場でのオーバーレイ

残念ながら私はAndroid APIの専門家ではないので、どちらの方法をとっているのかわからないし、ソリューションを最もうまく実装する方法もわかりません。

+0

は、私はそれはあなたが達成しようとしている何であるかを正確に求めることができますか?私はアンドロイドのGoogleマップが本当に貧しいことを知っています、そしてOSMDroidははるかに優れた機能を提供しますが、なぜ画面上に2 xのmapViewsを一度に持っていますか?それは間違っているようだ。 OSMDroidを使って、ローカルのタイルオーバーレイなどを使って自分自身でアプリケーションを書いてしまったので、OSMDroidのコードをかなり深く掘り下げなければならなかったので、問題が何であれ助けてくれるかもしれません。 – rspython

+0

ベース(Google)マップをオーバーレイする半透明タイル。例えば、特定のランドマークを強調する事前計算されたタイル。 –

答えて

2

描画方法を若干変更する必要があります(GoogleTilesOverlay)。

それは一定の大きさ(x,y,x+tileSizePx,y+tileSizePx).

簡単でそれを行うための基本的な方法の四角形を描画していると、ちょうど2枚のタイル(x,y and x+1,y+1)を取得し、ピクセル単位の違いを引きます。コードの下

ルック:

   final GeoPoint geoPointUL = new GeoPoint(
         (int) (Mercator.tile2lat(y, zoomLevel) * 1E6), 
         (int) (Mercator.tile2lon(x, zoomLevel) * 1E6));      

       final GeoPoint geoPointLR = new GeoPoint(
         (int) (Mercator.tile2lat(y+1, zoomLevel) * 1E6), 
         (int) (Mercator.tile2lon(x+1, zoomLevel) * 1E6)); 

       Point pointUL=new Point(), pointLR=new Point(); 
       pj.toPixels(geoPointUL, pointUL); 
       pj.toPixels(geoPointLR, pointLR); 
       tileSizePx = pointLR.x - pointUL.x; 
+0

これはトリックです! Mercatorクラスは廃止されましたが –

+0

@dwightgunningメルカトルの代わりに何を使うべきか知っていますか? –

+0

いいえ、それは何も交換が表示されません。 3.0.8の新しいコードで使用されているのを見たので、削除のタイムラインは定義されていないと思います。 –

関連する問題