Android osmdroid Google TileOverlay平滑调整大小缩放

Android osmdroid Google TileOverlay平滑调整大小缩放,android,google-maps,osmdroid,Android,Google Maps,Osmdroid,按照GoogleTile包装器示例,我使用osmdroid GoogleTileOverlay实现了一个GoogleMapView com.google.android.maps.MapView googleMapView; org.osmdroid.google.wrapper.MapView osmdMapView; org.osmdroid.google.overlay.GoogleTilesOverlay tiles; final MapView goo

按照GoogleTile包装器示例,我使用osmdroid GoogleTileOverlay实现了一个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覆盖层不会调整大小

结果是:放大时,保留在视图中的平铺开始重叠。相反,缩小时,每个平铺之间的间隙变得可见

在我看来,第一步是将GoogleTileOverlay子类化,以便修改draw()方法。那又怎么样

我在谷歌上努力搜索,找到了一些关于: a)在动画的中间,从DRAW()方法中短路 b) 使用Projector/Matrix类确定如何动态缩放覆盖


不幸的是,我不是安卓API的专家,所以不知道该怎么做。。。然后是如何最好地实现一个解决方案。

您需要对
googletileOverlay
中的draw方法进行轻微修改

按原样绘制一个恒定大小的矩形
(x,y,x+tileSizePx,y+tileSizePx)。

简单而基本的方法是,只需获得两个平铺
(x,y和x+1,y+1)
,然后减去像素差

请看下面的代码:


我能问一下你到底想达到什么目的吗?我知道谷歌地图android API非常糟糕,OSMDroid提供了更好的功能,但是为什么你要同时在屏幕上显示2个地图视图呢?这似乎是错误的。我可能能够帮助解决任何问题,因为我自己刚刚完成了一个使用OSMDroid的应用程序的编写,带有本地瓷砖覆盖等,所以我必须深入研究OSMDroid代码。半透明瓷砖,覆盖基本(谷歌)地图。例如,预先计算的瓷砖,突出某些地标。这就做到了!虽然Mercator类现在已被弃用。@dwightgunning您知道应该用什么来代替Mercator吗?不,似乎没有任何替代品。我在3.0.8的新代码中看到了它的使用,所以我猜删除的时间线没有定义。
                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;