You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Osmdroid地图添加Marker?代码报错需Drawable而非Marker

解决Osmdroid添加Marker时类型不匹配的问题

你遇到的问题是因为调用了错误的方法:map.getOverlay()(单数形式)对应的方法要求传入Drawable类型参数,而添加Marker应该使用map.getOverlays()(复数形式),它返回Overlay集合列表,支持直接添加Marker实例。

修改后的代码如下:

private void addMarker(GeoPoint point) {
    map.getController().setCenter(point);
    
    if (currentMarker != null) {
        map.getOverlays().remove(currentMarker); // 替换为getOverlays()
    }

    currentMarker = new Marker(map);
    currentMarker.setPosition(point);
    currentMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    // 直接给Marker设置自定义图标,无需单独创建Drawable实例
    currentMarker.setIcon(ContextCompat.getDrawable(getApplicationContext(), R.drawable.markerosm));
    
    map.getOverlays().add(currentMarker); // 替换为getOverlays()

    map.invalidate();
}

核心修改说明:

  • 将所有map.getOverlay()替换为map.getOverlays():前者是获取单个Overlay的方法,后者是获取Overlay集合的入口,Marker作为Overlay的子类,必须添加到这个集合中才能在地图上显示。
  • 移除了多余的drawableMarker变量,直接通过Marker.setIcon()方法设置自定义图标,这是Osmdroid Marker的标准用法。

内容的提问来源于stack exchange,提问作者Rasuv Chandanshive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:27:05