Apollo 10.0
自动驾驶开放平台
apollo::hdmap::adapter::HeaderXmlParser类 参考

#include <header_xml_parser.h>

apollo::hdmap::adapter::HeaderXmlParser 的协作图:

静态 Public 成员函数

static Status Parse (const tinyxml2::XMLElement &xml_node, PbHeader *header)
 

详细描述

在文件 header_xml_parser.h26 行定义.

成员函数说明

◆ Parse()

Status apollo::hdmap::adapter::HeaderXmlParser::Parse ( const tinyxml2::XMLElement &  xml_node,
PbHeader header 
)
static

在文件 header_xml_parser.cc41 行定义.

42 {
43 auto header_node = xml_node.FirstChildElement("header");
44 if (!header_node) {
45 std::string err_msg = "xml data missing header";
47 }
48 std::string rev_major;
49 std::string rev_minor;
50 std::string database_name;
51 std::string version;
52 std::string date;
53 double north = 0.0;
54 double south = 0.0;
55 double west = 0.0;
56 double east = 0.0;
57 std::string vendor;
58 int checker =
59 UtilXmlParser::QueryStringAttribute(*header_node, "revMajor", &rev_major);
60 checker +=
61 UtilXmlParser::QueryStringAttribute(*header_node, "revMinor", &rev_minor);
62 checker +=
63 UtilXmlParser::QueryStringAttribute(*header_node, "name", &database_name);
64 checker +=
65 UtilXmlParser::QueryStringAttribute(*header_node, "version", &version);
66 checker += UtilXmlParser::QueryStringAttribute(*header_node, "date", &date);
67 checker += header_node->QueryDoubleAttribute("north", &north);
68 checker += header_node->QueryDoubleAttribute("south", &south);
69 checker += header_node->QueryDoubleAttribute("east", &east);
70 checker += header_node->QueryDoubleAttribute("west", &west);
71 checker +=
72 UtilXmlParser::QueryStringAttribute(*header_node, "vendor", &vendor);
73
74 if (checker != tinyxml2::XML_SUCCESS) {
75 std::string err_msg = "Error parsing header attributes";
77 }
78
79 auto geo_reference_node = header_node->FirstChildElement("geoReference");
80 if (!geo_reference_node) {
81 std::string err_msg = "Error parsing header geoReoference attributes";
83 }
84 auto geo_text = geo_reference_node->FirstChild()->ToText();
85 if (!geo_text) {
86 std::string err_msg = "Error parsing header geoReoference text";
88 }
89
90 // coordinate frame
91 std::string zone_id;
92 std::string from_coordinate = geo_text->Value();
93 auto projection_node = header_node->FirstChildElement("projection");
94 if (projection_node != nullptr) {
95 auto utm_node = projection_node->FirstChildElement("utm");
96 if (!utm_node) {
97 std::string err_msg = "Error parsing header utm node";
99 }
100 checker =
101 UtilXmlParser::QueryStringAttribute(*utm_node, "zoneID", &zone_id);
102 if (checker != tinyxml2::XML_SUCCESS) {
103 std::string err_msg = "Error parsing utm zone id attributes";
105 }
106 } else {
107 int eastZone = GetLongZone(east);
108 int westZone = GetLongZone(west);
109 if (eastZone != westZone) {
110 std::string err_msg = "unsupport data in more than one zones";
112 }
113 zone_id = std::to_string(westZone);
114 }
115
116 std::string to_coordinate =
117 absl::StrCat("+proj=utm +zone=", zone_id,
118 " +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
120 to_coordinate);
121
122 header->set_version(version);
123 header->set_date(date);
124 header->mutable_projection()->set_proj(to_coordinate);
125 header->set_district(database_name);
126 header->set_rev_major(rev_major);
127 header->set_rev_minor(rev_minor);
128 header->set_left(west);
129 header->set_right(east);
130 header->set_top(north);
131 header->set_bottom(south);
132 header->set_vendor(vendor);
133
134 return Status::OK();
135}
static Status OK()
generate a success status.
Definition status.h:60
Status SetConvertParam(const std::string &source_param, const std::string &dst_param)
static tinyxml2::XMLError QueryStringAttribute(const tinyxml2::XMLElement &xml_node, const std::string &name, std::string *value)

该类的文档由以下文件生成: