osmdroid GoogleTilesOverlay 平滑调整缩放

3
遵循Google Tile Wrapper示例,我使用osmdroid GoogleTilesOverlay实现了一个带有Google MapView的地图。
    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);

在静止状态下,覆盖瓦片渲染得很好,但是当缩放(通过捏或通过控件)时,底层谷歌瓦片会平稳地调整大小并替换,但是osmd叠加层不会调整大小。结果是:在缩放时,仍然在视图中的瓦片开始重叠。反之,当缩小时,每个瓦片之间会出现间隙。
我认为第一步是对GoogleTilesOverlay进行子类化,以便可以修改draw()方法。但是接下来该怎么做呢?
我进行了艰苦的搜索,并找到了一些指向: a)在动画过程中从draw()方法中短路出去 b)使用Projector/Matrix类实时确定如何缩放叠加层
不幸的是,我不是Android API的专家,因此不确定该选择哪种方式...然后如何最佳实现解决方案。

我可以问一下你想要实现什么吗?我知道Google Maps Android API非常糟糕,而OSMDroid提供了更好的功能,但是为什么你要在屏幕上同时显示两个mapView呢?那似乎是不对的。如果有任何问题,我可能能够帮忙,因为我刚刚完成了一个使用OSMDroid的应用程序,包括本地瓦片覆盖等,所以我已经深入研究了OSMDroid代码。 - rspython
半透明的瓦片,覆盖在基础(谷歌)地图上。例如,预先计算的突出显示某些地标的瓦片。 - Dwight Gunning
1个回答

2
你需要对GoogleTilesOverlay中的绘制方法进行轻微修改。
当前它绘制了一个常量大小的矩形(x,y,x+tileSizePx,y+tileSizePx)。 简单而基本的方法是,获取两个瓷砖(x,y和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;

这个很管用!尽管Mercator类现在已经被弃用了。 - Dwight Gunning
@dwightgunning,你知道在Mercator的位置应该使用什么吗? - bradj
不,似乎没有替代方案。我在3.0.8的新代码中看到它被使用,所以我猜移除的时间表还没有定义。 - Dwight Gunning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接