4 #include <opencv2/core/core.hpp>
7 #include <opencv2/highgui/highgui.hpp>
8 #include <opencv2/imgproc/imgproc.hpp>
11 #include <boost/archive/xml_iarchive.hpp>
12 #include <boost/archive/xml_oarchive.hpp>
17 #define GRAPH_INFO_NAME "graphInfo"
18 #define TREE_INFO_NAME "treeInfo"
19 #define DATA_NAME "graphData"
20 #define MAP_NAME "map.png"
27 std::size_t
Serializer::getHash(
const std::vector<signed char> &_map,
const std::vector<double> &_parameters)
const
31 for(
const double & val : _parameters)
33 boost::hash_combine(seed, val);
36 for(
const signed char & val : _map)
38 boost::hash_combine(seed, val);
45 bool Serializer::load(
const std::string &_mapPath, std::vector<Segment> &_segs, Eigen::Vector2d &_origin,
float &_resolution)
50 boost::filesystem::path data(_mapPath +
DATA_NAME);
52 if(!boost::filesystem::exists(graf) | !boost::filesystem::exists(tree) | !boost::filesystem::exists(data) )
63 boost::archive::xml_iarchive xml(ifs);
64 xml >> boost::serialization::make_nvp(
"GraphInfo", g);
72 boost::archive::xml_iarchive xmlti(ifti);
73 xmlti >> boost::serialization::make_nvp(
"TreeInfo", t);
79 std::vector<SegmentSerializer> segs;
85 for(
int i = 0; i < t.
Length; i++)
88 segs.emplace_back(pred[i], succ[i], pts[i]);
92 std::ifstream ifsDist(_mapPath +
DATA_NAME);
93 boost::archive::xml_iarchive iaDist(ifsDist);
94 iaDist >> boost::serialization::make_nvp(
"graph",graph);
99 for(
int i = 0; i < graph.
Length; i++)
101 std::vector<Eigen::Vector2d> pts;
106 pts.emplace_back(ptPtr[j].x, ptPtr[j].y);
115 for(
int i = 0; i < graph.
Length; i++)
117 std::vector<uint32_t> predecessors;
118 std::vector<uint32_t> successors;
124 if(!_segs[i].containsPredecessor(predPtr[j]))
125 _segs[i].addPredecessor(predPtr[j]);
132 if(!_segs[i].containsSuccessor(succPtr[j]))
133 _segs[i].addSuccessor(succPtr[j]);
142 bool Serializer::load(
const std::string &_mapPath, std::vector<Segment> &_segs, Eigen::Vector2d &_origin,
float &_resolution, cv::Mat &_map){
143 if(
load(_mapPath, _segs, _origin, _resolution) && boost::filesystem::exists(boost::filesystem::path(_mapPath +
MAP_NAME))){
144 _map = cv::imread(_mapPath +
MAP_NAME, cv::IMREAD_GRAYSCALE);
155 void Serializer::save(
const std::string &_mapPath,
const std::vector<Segment> &_segs,
const Eigen::Vector2d &_origin,
const float &_resolution)
157 if(!boost::filesystem::exists(_mapPath))
158 boost::filesystem::create_directories(_mapPath);
162 GraphInfo info(_origin, _resolution, _segs.size());
165 boost::archive::xml_oarchive oa(ofs);
166 oa << boost::serialization::make_nvp(
"GraphInfo", info);
172 assert(ofsTree.good());
173 boost::archive::xml_oarchive ot(ofsTree);
174 ot << boost::serialization::make_nvp(
"TreeInfo", tInfo);
178 std::vector<SegmentSerializer> segs;
180 for(
const auto & seg : _segs)
182 segs.emplace_back(seg);
187 std::ofstream ofsGraph(_mapPath +
DATA_NAME);
188 boost::archive::xml_oarchive oaGraph(ofsGraph);
189 oaGraph << boost::serialization::make_nvp(
"graph", graph);
193 void Serializer::save(
const std::string &_mapPath,
const std::vector<Segment> &_segs,
const Eigen::Vector2d &_origin,
const float &_resolution,
const cv::Mat &_map){
194 save(_mapPath, _segs, _origin, _resolution);
195 if(!boost::filesystem::exists(_mapPath))
196 boost::filesystem::create_directories(_mapPath);
198 cv::imwrite(_mapPath +
MAP_NAME, _map);