gpt4 book ai didi

没有clear()的Android map 更改瓦片覆盖

转载 作者:行者123 更新时间:2023-12-05 06:45:38 27 4
gpt4 key购买 nike

我有一张 map ,您可以从中选择多种 map 类型(默认 Google Maps Tiles(在线)、OSM tiles(离线)、我的其他自定义 map (离线))。

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

问题是,可以在谷歌地图类型之间进行更改,因为它有功能,无需清除 map 并重新创建和插入标记。

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

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

我像这样添加 map 图 block 叠加层:

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

最佳答案

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

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

关于没有clear()的Android map 更改瓦片覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22806380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com