地理围栏应用无法绘制多个圆形与地图标记问题求助
解决地图仅绘制单个地理围栏圆形和标记的问题
嘿,你已经精准揪出问题根源了!在loadGeofencesFromDatabase的循环里,每次迭代都重新初始化GeofenceLatLngCoordinates集合,这就导致之前循环添加的坐标全被清空,最后集合里只剩最后一个坐标,自然只能画出一个围栏和标记。
接下来给你整理好的修正方案:
核心修正点
把集合初始化和addGeofences()调用都移到循环外面——这样每次循环只会往同一个集合里追加坐标,而不是覆盖整个集合,同时避免重复调用添加地理围栏的方法。
修正后的完整代码
private void loadGeofencesFromDatabase() { // 集合只初始化一次,放在循环外面 GeofenceLatLngCoordinates = new ArrayList<>(); GEOFENCE_RADIUS = Constants.GEOFENCE_RADIUS_IN_METERS; for (Map.Entry<String, LatLng> entry : Constants.BAY_AREA_LANDMARKS.entrySet()) { mGeofenceList.add(new Geofence.Builder() .setRequestId(entry.getKey()) .setCircularRegion( entry.getValue().latitude, entry.getValue().longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .build()); // 往已存在的集合里添加坐标,而非新建集合 GeofenceLatLngCoordinates.add(new LatLng(entry.getValue().latitude, entry.getValue().longitude)); } // 所有地理围栏构建完成后,统一调用添加方法 addGeofences(); }
额外优化建议
- 确认
GeofenceLatLngCoordinates是类的成员变量,而非方法内的局部变量,这样drawGeofence才能访问到完整的坐标列表。 - 如果后续需要支持不同半径的地理围栏,别用单一的
GEOFENCE_RADIUS变量,可以创建一个List<Double>来存储每个围栏对应的半径,在循环里同步添加,这样drawGeofence就能为每个圆形设置正确的半径了。
这样修改后,drawGeofence遍历完整的坐标集合,就能画出所有地理围栏的圆形和标记,同时地理围栏的进入/退出功能依然能正常工作。
内容的提问来源于stack exchange,提问作者captain_watanabe
相关产品推荐
相关产品推荐

