Jsoncpp 自动分区数据处理与文件更新
// 如果不是删除操作,则进行自动分区数据处理
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;
}
原文地址: https://www.cveoy.top/t/topic/nH6I 著作权归作者所有。请勿转载和采集!