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

使用SupportMapFragment时谷歌地图无法显示多个标记问题

解决Google Maps仅显示单个标记的问题

嗨,我来帮你排查下这个问题,从你的代码和描述来看,主要有两个关键点需要调整:

1. 相机频繁移动导致的“视觉假象”(最大概率的原因)

你在循环里每添加一个标记就调用一次mMap.moveCamera(),这会让地图相机每次都直接跳转到当前标记的位置。等循环跑完,相机只会停在最后一个标记的坐标上——如果其他标记不在当前相机的视野范围内,就会看起来好像只显示了一个标记,但实际上所有标记都已经添加到地图上了。

修复方案:

把相机移动的逻辑移到循环外面,或者用LatLngBounds让地图自动适配所有标记的范围,这样所有标记都会显示在视野里:

@Override 
public void onMapReady(GoogleMap googleMap) { 
    this.mMap = googleMap; 
    List<LatLng> allMarkerPositions = new ArrayList<>();
    
    // 先批量添加所有标记
    for(int i=0;i<providers.size();i++){ 
        NearbyDataProvider provider = providers.get(i); 
        LatLng position = new LatLng(
            Double.parseDouble(provider.getLattitude()), 
            Double.parseDouble(provider.getLongitude())
        ); 
        // 可以给标记加个标题,方便区分不同地点
        mMap.addMarker(new MarkerOptions().position(position).title(provider.getPlace())); 
        allMarkerPositions.add(position);
    } 
    
    // 让地图自动适配所有标记的范围,避免只看到单个标记
    if (!allMarkerPositions.isEmpty()) {
        LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();
        for (LatLng latLng : allMarkerPositions) {
            boundsBuilder.include(latLng);
        }
        LatLngBounds bounds = boundsBuilder.build();
        int padding = 100; // 给地图边界留100px的内边距,避免标记贴边
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, padding);
        mMap.moveCamera(cameraUpdate);
    }
}

2. 确认providers集合是否正确填充了数据

你提到调试时发现addMarker只传入了一个位置,这说明你的providers集合可能只有1个元素。你需要检查初始化providers的代码,确保把你准备的5组经纬度数据都正确添加进去了,比如:

// 参考初始化代码,对照你自己的实现检查
List<NearbyDataProvider> providers = new ArrayList<>();
private String[] latitude = {"19.2372","19.1998","19.1802","19.1551","19.1405"}; 
private String[] longitude = {"72.8441","72.8426","72.8554","72.8679","72.8422"};

// 循环把所有经纬度对应添加到providers里
for (int i = 0; i < latitude.length; i++) {
    // 这里的image参数可以根据你的实际需求传入对应资源ID
    providers.add(new NearbyDataProvider(R.drawable.ic_marker, "地点" + (i+1), latitude[i], longitude[i]));
}

额外小提示

  • 调试时可以打印Log.d("MapDebug", "providers size: " + providers.size()),确认集合里的元素数量是否和你预期的一致
  • 如果标记位置很接近,可能会重叠在一起,看起来像一个,可以给标记设置不同的图标或者手动调整相机缩放级别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:55