MCPcopy Create free account
hub / github.com/comaps/comaps / SaveTrackData

Function SaveTrackData

libs/kml/serdes_gpx.cpp:532–593  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

530}
531
532void SaveTrackData(Writer & writer, TrackData const & trackData)
533{
534 writer << "<trk>\n";
535 auto name = GetDefaultLanguage(trackData.m_name);
536 if (name)
537 {
538 writer << kIndent2 << "<name>";
539 SaveStringWithCDATA(writer, *name);
540 writer << "</name>\n";
541 }
542 if (auto const description = GetDefaultLanguage(trackData.m_description))
543 {
544 writer << kIndent2 << "<desc>";
545 SaveStringWithCDATA(writer, *description);
546 writer << "</desc>\n";
547 }
548 if (auto const color = TrackColor(trackData); color != kDefaultTrackColor)
549 {
550 writer << kIndent2 << "<extensions>\n";
551 writer << kIndent4 << "<gpxx:TrackExtension><gpxx:DisplayColor>";
552 writer << kml::MapGarminColor(color);
553 writer << "</gpxx:DisplayColor></gpxx:TrackExtension>\n";
554 writer << kIndent4 << "<gpx_style:line><gpx_style:color>";
555 SaveColorToRGB(writer, color);
556 writer << "</gpx_style:color></gpx_style:line>\n";
557 writer << kIndent4 << "<xsi:gpx><color>#";
558 SaveColorToARGB(writer, color);
559 writer << "</color></xsi:gpx>\n";
560 writer << kIndent2 << "</extensions>\n";
561 }
562 bool const trackHasAltitude = TrackHasAltitudes(trackData);
563 auto const & geom = trackData.m_geometry;
564 for (size_t lineIndex = 0; lineIndex < geom.m_lines.size(); ++lineIndex)
565 {
566 auto const & line = geom.m_lines[lineIndex];
567 auto const & timestampsForLine = geom.m_timestamps[lineIndex];
568 auto const lineHasTimestamps = geom.HasTimestampsFor(lineIndex);
569
570 if (lineHasTimestamps)
571 CHECK_EQUAL(line.size(), timestampsForLine.size(), ());
572
573 writer << kIndent2 << "<trkseg>\n";
574
575 for (size_t pointIndex = 0; pointIndex < line.size(); ++pointIndex)
576 {
577 auto const & point = line[pointIndex];
578 auto const [lat, lon] = mercator::ToLatLon(point);
579
580 writer << kIndent4 << "<trkpt lat=\"" << CoordToString(lat) << "\" lon=\"" << CoordToString(lon) << "\">\n";
581
582 if (trackHasAltitude)
583 writer << kIndent6 << "<ele>" << CoordToString(point.GetAltitude()) << "</ele>\n";
584
585 if (lineHasTimestamps)
586 writer << kIndent6 << "<time>" << base::SecondsSinceEpochToString(timestampsForLine[pointIndex]) << "</time>\n";
587
588 writer << kIndent4 << "</trkpt>\n";
589 }

Callers 1

WriteMethod · 0.70

Calls 13

GetDefaultLanguageFunction · 0.85
SaveStringWithCDATAFunction · 0.85
TrackColorFunction · 0.85
MapGarminColorFunction · 0.85
SaveColorToRGBFunction · 0.85
SaveColorToARGBFunction · 0.85
TrackHasAltitudesFunction · 0.85
CoordToStringFunction · 0.85
HasTimestampsForMethod · 0.80
ToLatLonFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected