You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenWeatherMap自定义TileProvider无法在谷歌地图显示降水瓦片

修复OpenWeatherMap降水瓦片在Google Map上不显示的问题

我仔细看了你的代码,发现几个关键问题导致降水瓦片无法正常加载,咱们一步步来解决:

1. 修正OpenWeatherMap瓦片URL的格式错误

你的OWM_TILE_URL里,appid参数前面缺少了问号?,这会导致API密钥无法被服务器正确识别,返回的可能是无效或空白的瓦片图片。

修改这个常量:

private static String OWM_TILE_URL = "http://tile.openweathermap.org/map/%s/%d/%d/%d.png?appid=ffe8e3ec39ae79c82c32ebba7059ab14";

2. 完善onMapReady的异步初始化逻辑

getMapAsync是异步加载地图的方法,你原来的setUpMapIfNeeded里直接判断mMap != null不会生效——因为地图还没加载完成。必须在onMapReady回调里完成地图和瓦片的初始化:

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    setUpMap(); // 地图准备就绪后再添加瓦片
}

同时调整setUpMapIfNeeded方法,去掉无效的setUpMap调用:

private void setUpMapIfNeeded() {
    if (mMap == null) {
        ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMapAsync(this);
    }
}

3. 检查自定义TransparentTileOwm的实现

你当前使用的是自定义的TransparentTileOwm作为TileProvider,但没有给出这个类的代码。如果前两步修复后还是无法显示,需要确保这个类:

  • 正确拼接了修正后的瓦片URL
  • 能正常发起网络请求并返回有效的Tile对象(比如从输入流读取图片字节数据)

可以先临时切换回createTilePovider()(注意方法名拼写错误,建议改成createTileProvider())测试,确认基础瓦片加载逻辑正常后,再调试透明瓦片的实现。

4. 修复Spinner选中事件的空指针风险

onItemSelected方法里,移除瓦片前要先判断tileOver是否为null,避免空指针异常:

if (mMap != null && tileOver != null) {
    tileOver.remove();
    setUpMap();
}

完成这些修改后,重新运行应用,降水瓦片应该就能正常显示在Google Map上了。

内容的提问来源于stack exchange,提问作者Edgarjon Komilov

火山引擎 最新活动