我有一个包含多种地图类型的地图供您选择(默认Google地图平铺(在线),OSM平铺(离线),我的其他自定义地图(离线))。
此外,我在地图上有394个标记(但它只是一个小城镇的一个小地图......不重要)
问题是,可以在Google地图类型之间进行更改,因为它可以正常运行,无需清除地图并重新创建和插入标记。
但是,如果我选择OSM地图图块,它们会像Overlay一样添加,所以当我想将它们更改为另一个地图(包括Google地图)时,我必须调用mMap.clear()然后添加所有标记和不同的地图图块或更改谷歌地图的类型。
我知道可以通过将特定标记保存在变量中来删除它,然后在其上调用remove()。是否有与地图叠加相似的内容?
我添加了这样的地图图块叠加层:
mMap.addTileOverlay(new TileOverlayOptions().tileProvider(new CustomMapTileProvider(m_context,MAP_TYPE_OSM)));
答案 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));
}