Android地图更改瓷砖叠加层没有clear()

时间:2014-04-02 09:01:04

标签: android android-maps-v2

我有一个包含多种地图类型的地图供您选择(默认Google地图平铺(在线),OSM平铺(离线),我的其他自定义地图(离线))。

此外,我在地图上有394个标记(但它只是一个小城镇的一个小地图......不重要)

问题是,可以在Google地图类型之间进行更改,因为它可以正常运行,无需清除地图并重新创建和插入标记。

但是,如果我选择OSM地图图块,它们会像Overlay一样添加,所以当我想将它们更改为另一个地图(包括Google地图)时,我必须调用mMap.clear()然后添加所有标记和不同的地图图块或更改谷歌地图的类型。

我知道可以通过将特定标记保存在变量中来删除它,然后在其上调用remove()。是否有与地图叠加相似的内容?

我添加了这样的地图图块叠加层:

mMap.addTileOverlay(new TileOverlayOptions().tileProvider(new CustomMapTileProvider(m_context,MAP_TYPE_OSM)));

1 个答案:

答案 0 :(得分:0)

开拓者自己解决了他的问题:

您需要将gmap.addTileOverlay()方法的返回值存储到变量中,并且然后可以调用.remove()(就像您一样带标记):

public class Map {
    private TileOverlay tileOverlay;
    ...

    void replaceOverlayTiles() {

        TileProvider tileProvider = new UrlTileProvider(256, 256) {
        @Override
        public URL getTileUrl(int x, int y, int zoom) {
            String s = String.format(Locale.GERMANY, "http://www.domain.com/xyz_tiles/%d/%d/%d.png", zoom, x, y);

            if (!checkTileExists(x, y, zoom))
                return null;

            try {
                return new URL(s);
            } catch (MalformedURLException e) {
                throw new AssertionError(e);
            }
        }

        private boolean checkTileExists(int x, int y, int zoom) {
            return !(zoom < 0 || zoom > 20);
        }
    };

    if (tileOverlay != null)
        tileOverlay.remove();

    tileOverlay = googleMap.addTileOverlay(new TileOverlayOptions().fadeIn(false).tileProvider(tileProvider));
}