Android地图更改瓦片覆盖物而不清除()函数

3

我有一张地图,其中包含多种地图类型可供选择(默认为在线Google地图瓦片、离线OSM瓦片和我的其他自定义地图)。

此外,我在地图上放置了394个标记(但只是一个小城镇的地图……不重要)。

问题是,可以在不清除地图并重新创建和插入所有标记的情况下更改谷歌地图类型,因为有相应的函数可用。

但是,如果我选择例如OSM地图瓦片,则它们会像叠加层一样添加,因此当我想将它们更改为另一种地图(包括谷歌地图)时,我必须调用mMap.clear(),然后添加所有标记和不同的地图瓦片或更改谷歌地图类型。

我知道可以通过将其保存在变量中并调用remove()来删除特定标记。是否有类似于地图叠加层的东西?

我是这样添加地图瓦片叠加层的:

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

没事了,我在写问题的时候已经找到答案了。就像使用标记一样,我创建了TileOverlay变量,在其中保存了TileOverlay,然后调用remove()方法将其删除。我不知道我怎么会错过这个。 - ezpzlmnsqz1337
谢谢@(Zdeněk Braun),我也错过了这个简单的解决方案。我建议您将常规答案发布到自己的问题中,并将其选择为“接受的答案”,这样您就可以从声望中受益。 - Giorgio Barchiesi
1个回答

1

楼主已经自己解决了问题:

你需要将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));
}

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