| 515 | } |
| 516 | |
| 517 | std::unique_ptr<kml::FileData> LoadKmlData(Reader const & reader, KmlFileType fileType) |
| 518 | { |
| 519 | auto data = std::make_unique<kml::FileData>(); |
| 520 | try |
| 521 | { |
| 522 | if (fileType == KmlFileType::Binary) |
| 523 | { |
| 524 | kml::binary::DeserializerKml des(*data); |
| 525 | des.Deserialize(reader); |
| 526 | } |
| 527 | else if (fileType == KmlFileType::Text) |
| 528 | { |
| 529 | kml::DeserializerKml des(*data); |
| 530 | des.Deserialize(reader); |
| 531 | } |
| 532 | else if (fileType == KmlFileType::Gpx) |
| 533 | { |
| 534 | kml::DeserializerGpx des(*data); |
| 535 | des.Deserialize(reader); |
| 536 | } |
| 537 | else |
| 538 | { |
| 539 | CHECK(false, ("Not supported KmlFileType")); |
| 540 | } |
| 541 | ValidateKmlData(data); |
| 542 | RemoveDuplicatedTrackPoints(data); |
| 543 | } |
| 544 | catch (Reader::Exception const & e) |
| 545 | { |
| 546 | LOG(LWARNING, ("KML", fileType, "reading failure:", e.what())); |
| 547 | return nullptr; |
| 548 | } |
| 549 | catch (kml::binary::DeserializerKml::DeserializeException const & e) |
| 550 | { |
| 551 | LOG(LWARNING, ("KML", fileType, "deserialization failure:", e.what())); |
| 552 | return nullptr; |
| 553 | } |
| 554 | catch (kml::DeserializerKml::DeserializeException const & e) |
| 555 | { |
| 556 | LOG(LWARNING, ("KML", fileType, "deserialization failure:", e.what())); |
| 557 | return nullptr; |
| 558 | } |
| 559 | catch (std::exception const & e) |
| 560 | { |
| 561 | LOG(LWARNING, ("KML", fileType, "loading failure:", e.what())); |
| 562 | return nullptr; |
| 563 | } |
| 564 | return data; |
| 565 | } |
| 566 | |
| 567 | bool SaveGpxData(kml::FileData & kmlData, Writer & writer) |
| 568 | { |