43 auto header_node = xml_node.FirstChildElement(
"header");
45 std::string err_msg =
"xml data missing header";
48 std::string rev_major;
49 std::string rev_minor;
50 std::string database_name;
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);
74 if (checker != tinyxml2::XML_SUCCESS) {
75 std::string err_msg =
"Error parsing header attributes";
79 auto geo_reference_node = header_node->FirstChildElement(
"geoReference");
80 if (!geo_reference_node) {
81 std::string err_msg =
"Error parsing header geoReoference attributes";
84 auto geo_text = geo_reference_node->FirstChild()->ToText();
86 std::string err_msg =
"Error parsing header geoReoference text";
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");
97 std::string err_msg =
"Error parsing header utm node";
102 if (checker != tinyxml2::XML_SUCCESS) {
103 std::string err_msg =
"Error parsing utm zone id attributes";
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";
113 zone_id = std::to_string(westZone);
116 std::string to_coordinate =
117 absl::StrCat(
"+proj=utm +zone=", zone_id,
118 " +ellps=WGS84 +datum=WGS84 +units=m +no_defs");
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);