4 #include <opencv/cv.hpp> 9 #include <boost/archive/xml_iarchive.hpp> 10 #include <boost/archive/xml_oarchive.hpp> 15 #define GRAPH_INFO_NAME "graphInfo" 16 #define TREE_INFO_NAME "treeInfo" 17 #define DATA_NAME "graphData" 18 #define MAP_NAME "map.png" 25 std::size_t
Serializer::getHash(
const std::vector<signed char> &_map,
const std::vector<double> &_parameters)
const 29 for(
const double & val : _parameters)
31 boost::hash_combine(seed, val);
34 for(
const signed char & val : _map)
36 boost::hash_combine(seed, val);
43 bool Serializer::load(
const std::string &_mapPath, std::vector<Segment> &_segs, Eigen::Vector2d &_origin,
float &_resolution)
48 boost::filesystem::path data(_mapPath +
DATA_NAME);
50 if(!boost::filesystem::exists(graf) | !boost::filesystem::exists(tree) | !boost::filesystem::exists(data) )
61 boost::archive::xml_iarchive xml(ifs);
62 xml >> boost::serialization::make_nvp(
"GraphInfo", g);
70 boost::archive::xml_iarchive xmlti(ifti);
71 xmlti >> boost::serialization::make_nvp(
"TreeInfo", t);
77 std::vector<SegmentSerializer> segs;
83 for(
int i = 0; i < t.
Length; i++)
86 segs.emplace_back(pred[i], succ[i], pts[i]);
90 std::ifstream ifsDist(_mapPath +
DATA_NAME);
91 boost::archive::xml_iarchive iaDist(ifsDist);
92 iaDist >> boost::serialization::make_nvp(
"graph",graph);
97 for(
int i = 0; i < graph.
Length; i++)
99 std::vector<Eigen::Vector2d> pts;
104 pts.emplace_back(ptPtr[j].x, ptPtr[j].y);
113 for(
int i = 0; i < graph.
Length; i++)
115 std::vector<uint32_t> predecessors;
116 std::vector<uint32_t> successors;
122 if(!_segs[i].containsPredecessor(predPtr[j]))
123 _segs[i].addPredecessor(predPtr[j]);
130 if(!_segs[i].containsSuccessor(succPtr[j]))
131 _segs[i].addSuccessor(succPtr[j]);
140 bool Serializer::load(
const std::string &_mapPath, std::vector<Segment> &_segs, Eigen::Vector2d &_origin,
float &_resolution, cv::Mat &_map){
141 if(
load(_mapPath, _segs, _origin, _resolution) && boost::filesystem::exists(boost::filesystem::path(_mapPath +
MAP_NAME))){
142 _map = cv::imread(_mapPath +
MAP_NAME, cv::IMREAD_GRAYSCALE);
153 void Serializer::save(
const std::string &_mapPath,
const std::vector<Segment> &_segs,
const Eigen::Vector2d &_origin,
const float &_resolution)
155 if(!boost::filesystem::exists(_mapPath))
156 boost::filesystem::create_directories(_mapPath);
160 GraphInfo info(_origin, _resolution, _segs.size());
163 boost::archive::xml_oarchive oa(ofs);
164 oa << boost::serialization::make_nvp(
"GraphInfo", info);
170 assert(ofsTree.good());
171 boost::archive::xml_oarchive ot(ofsTree);
172 ot << boost::serialization::make_nvp(
"TreeInfo", tInfo);
176 std::vector<SegmentSerializer> segs;
178 for(
const auto & seg : _segs)
180 segs.emplace_back(seg);
185 std::ofstream ofsGraph(_mapPath +
DATA_NAME);
186 boost::archive::xml_oarchive oaGraph(ofsGraph);
187 oaGraph << boost::serialization::make_nvp(
"graph", graph);
191 void Serializer::save(
const std::string &_mapPath,
const std::vector<Segment> &_segs,
const Eigen::Vector2d &_origin,
const float &_resolution,
const cv::Mat &_map){
192 save(_mapPath, _segs, _origin, _resolution);
193 if(!boost::filesystem::exists(_mapPath))
194 boost::filesystem::create_directories(_mapPath);
196 cv::imwrite(_mapPath +
MAP_NAME, _map);
size_t getHash(const std::vector< signed char > &_map, const std::vector< double > &_parameters) const
generate a hash from a _map
std::unique_ptr< int > Predecessors
std::unique_ptr< int > predecessors
bool load(const std::string &_mapPath, std::vector< Segment > &_segs, Eigen::Vector2d &_origin, float &_resolution)
loads a graph from memory which is saved in plain text
std::unique_ptr< PointSerializer > points
std::unique_ptr< int > successors
void save(const std::string &_mapPath, const std::vector< Segment > &_segs, const Eigen::Vector2d &_origin, const float &_resolution)
saves the graph to a specific path in xml format
std::unique_ptr< int > Successors
std::unique_ptr< int > Points
SegmentSerializer * segments_