Changed V9MM format to read multiple geometries

Signed-off-by: Sergiy Kozyr <s.trump@gmail.com>
This commit is contained in:
Sergiy Kozyr 2024-08-14 21:44:39 +03:00
parent a076ac687a
commit a7233ac166
2 changed files with 36 additions and 4 deletions

View file

@ -38,4 +38,19 @@ void MultiGeometry::FromPoints(std::vector<m2::PointD> const & points)
ASSERT(line.size() > 1, ());
m_lines.push_back(std::move(line));
}
MultiGeometry mergeGeometry(std::vector<MultiGeometry> aGeometries)
{
MultiGeometry merged;
for (auto const & geometry : aGeometries)
{
for (auto const & line : geometry.m_lines)
{
merged.m_lines.push_back(line);
}
}
return merged;
}
} // namespace kml

View file

@ -5,6 +5,9 @@
namespace kml
{
MultiGeometry mergeGeometry(std::vector<MultiGeometry> aGeometries);
struct TrackDataV9MM : TrackDataV8MM
{
DECLARE_VISITOR_AND_DEBUG_PRINT(TrackDataV9MM, visitor(m_id, "id"),
@ -13,8 +16,7 @@ struct TrackDataV9MM : TrackDataV8MM
visitor(m_description, "description"),
visitor(m_layers, "layers"),
visitor(m_timestamp, "timestamp"),
visitor(m_flag1, "flag1"), // Extra field introduced in V9MM.
visitor(m_geometry, "geometry"),
visitor(m_multiGeometry, "multiGeometry"), // V9MM introduced multiGeometry instead of a single one
visitor(m_visible, "visible"),
visitor(m_constant1, "constant1"),
visitor(m_constant2, "constant2"),
@ -25,8 +27,23 @@ struct TrackDataV9MM : TrackDataV8MM
DECLARE_COLLECTABLE(LocalizableStringIndex, m_name, m_description, m_nearestToponyms, m_properties)
// Extra field introduced in V9MM for tracks.
bool m_flag1 = true;
TrackData ConvertToLatestVersion() const
{
TrackData data;
data.m_id = m_id;
data.m_localId = m_localId;
data.m_name = m_name;
data.m_description = m_description;
data.m_layers = m_layers;
data.m_timestamp = m_timestamp;
data.m_geometry = mergeGeometry(m_multiGeometry);
data.m_visible = m_visible;
data.m_nearestToponyms = m_nearestToponyms;
data.m_properties = m_properties;
return data;
}
std::vector<MultiGeometry> m_multiGeometry;
};