3

Google Tile Wrapperの例に従って、osmdroidGoogleTilesOverlayを使用してgoogleMapViewを実装しました。

    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オーバーレイのサイズは変更されません。

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

最初のステップは、draw()メソッドを変更できるように、GoogleTilesOverlayをサブクラス化することのように見えます。しかし、それでは何ですか?

私は一生懸命グーグルで検索し、次のようないくつかの指針を見つけました:a)アニメーションの途中でdraw()メソッドを短絡するb)Projector/Matrixクラスを使用してオーバーレイをその場でスケーリングする方法を決定する

残念ながら、私はAndroid APIの専門家ではないため、どちらに進むべきか、そしてソリューションを最適に実装する方法がわかりません。

4

1 に答える 1

2

のdrawメソッドを少し変更する必要があります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;
于 2012-05-03T16:01:37.690 に答える