// 如果不是删除操作,则进行自动分区数据处理
if (operation != 'delete') {
    Json::Value &auto_area_shm = shm_area_json['autoAreaValue'];

    if (!JsoncppParseRead::ReadFileToJson(AREA_SETTING_FILE, file_area_json)) {
        LOGD('load area file failed');
        return -1;
    }
    LOGE('file_area_json %s', file_area_json.toStyledString().c_str());
    LOGE('auto_area_shm %s', auto_area_shm.toStyledString().c_str());
    int i_map_id;
    MAPDATA::GetMapID(i_map_id);

    /***************
     * 区域文件的操作
    ****************/
    // 这里只需要考虑 delete_segment、update、分区编辑
    file_area_json['mapId']      = i_map_id; // auto_area_shm['mapId'];
    file_area_json['autoAreaId'] = shm_area_json['autoAreaId'];
    // 先备份一下自动分区信息,方便保留定制信息
    Json::Value autoarea_file_bk = file_area_json['autoAreaValue'];
    if (file_area_json.isMember('autoAreaValue')) {
        // 这里还不能直接 clear,还要把自动分区信息先备份一下,保留定制清扫信息。
        file_area_json.removeMember('autoAreaValue');
    }

    Json::Value pointsDataJson;
    JsoncppParseRead::ReadStringToJson('[[0,0],[0,0],[0,0],[0,0]]', pointsDataJson);
    std::string default_room_format =
            CFGS2(CONFIG_FILE_GLOBAL_CONFIG, 'property_set', 'default_room_format', 'room');

    if (default_room_format == '''') {// 这个平台坑(平台配置''时下发"")
        default_room_format = '';
    }        

    for (uint32_t i = 0; i < auto_area_shm.size(); i++) {
        int id = auto_area_shm[i]['id'].asInt();
        uint32_t j = 0;
        bool is_find= false;
        for (; j < autoarea_file_bk.size(); j++) {
            if (id == autoarea_file_bk[j]['id'].asInt()) {
                file_area_json['autoAreaValue'].append(autoarea_file_bk[j]);
                is_find = true;
            } 
        }
        if (!is_find) {
            auto_area_shm[i]['vertexs']     = pointsDataJson;
            auto_area_shm[i]['active']      = 'normal';
            auto_area_shm[i]['mode']        = 'autolayer';
            if (!default_room_format.empty()) {
                auto_area_shm[i]['name']    = StringUtils::format('%s%d', default_room_format.c_str(), id).c_str();
            }else{// 这个地方删掉 room
                auto_area_shm[i]['name'].clear();
            }
            file_area_json['autoAreaValue'].append(auto_area_shm[i]);
        }
    }
    LOGE('file_area_json %s', file_area_json.toStyledString().c_str());
    // 设置区域文件
    FileUtils::WriteStrToFile(AREA_SETTING_FILE, file_area_json.toStyledString().c_str(),
                                    file_area_json.toStyledString().size());
// 如果是删除操作,直接把自动分区信息清空
} else {
    file_area_json.removeMember('autoAreaValue');
    // 设置区域文件
    FileUtils::WriteStrToFile(AREA_SETTING_FILE, file_area_json.toStyledString().c_str(),
                                    file_area_json.toStyledString().size());
}
return 0;
}
Jsoncpp 自动分区数据处理与文件更新

原文地址: https://www.cveoy.top/t/topic/nH6I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录