swift
kmlutils.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "misc/geo/kmlutils.h"
5 
6 #include <QStringBuilder>
7 
8 using namespace swift::misc;
9 using namespace swift::misc::geo;
10 using namespace swift::misc::physical_quantities;
11 
12 namespace swift::misc::geo
13 {
14  const QStringList &CKmlUtils::getLogCategories()
15  {
16  static const QStringList cats { CLogCategories::interpolator() };
17  return cats;
18  }
19 
20  QString CKmlUtils::wrapAsKmlDocument(const QString &content)
21  {
22  return u"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
23  u"<kml xmlns=\"http://www.opengis.net/kml/2.2\" "
24  u"xmlns:gx=\"http://www.google.com/kml/ext/2.2\">\n"
25  u"<Document>\n" %
26  content %
27  u"</Document>\n"
28  u"</kml>\n";
29  }
30 
31  QString CKmlUtils::wrapAsKmlCoordinates(const QString &content)
32  {
33  return u"<coordinates>" % content % u"</coordinates>";
34  }
35 
36  QString CKmlUtils::asRawCoordinates(const ICoordinateGeodetic &coordinate, bool withAltitude)
37  {
38  return coordinate.longitude().valueRoundedAsString(CAngleUnit::deg(), 8) % u"," %
39  coordinate.latitude().valueRoundedAsString(CAngleUnit::deg(), 8) %
40  (withAltitude ? (u"," % coordinate.geodeticHeight().valueRoundedAsString(CLengthUnit::m())) : QString());
41  }
42 
43  QString CKmlUtils::asPoint(const ICoordinateGeodetic &coordinate, const KMLSettings &settings)
44  {
45  return u"<Point><coordinates>" % CKmlUtils::asRawCoordinates(coordinate, settings.withAltitude) %
46  u"</coordinates>" % (settings.extrude ? u"<extrude>1</extrude>" : u"") %
47  (settings.withAltitude && !settings.altitudeMode.isEmpty() ?
48  u"<altitudeMode>" % settings.altitudeMode % "</altitudeMode>" :
49  QString()) %
50  u"</Point>";
51  }
52 
53  QString CKmlUtils::asPlacemark(const QString &name, const QString &description,
54  const ICoordinateGeodetic &coordinate, const KMLSettings &settings)
55  {
56  return u"<Placemark>" % asPoint(coordinate, settings) %
57  (name.isEmpty() ? QString() : u"<name>" % name.toHtmlEscaped() % u"</name>") %
58  (description.isEmpty() ? QString() :
59  u"<description>" % description.toHtmlEscaped() % u"</description>") %
60  u"</Placemark>";
61  }
62 
63  QString CKmlUtils::asLineString(const QString &coordinatesRaw, const CKmlUtils::KMLSettings &settings)
64  {
65  return u"<LineString>" %
66  (settings.withAltitude && !settings.altitudeMode.isEmpty() ?
67  u"<altitudeMode>" % settings.altitudeMode % "</altitudeMode>" :
68  QString()) %
69  (settings.tessellate ? u"<tessellate>1</tessellate>" : u"") %
70  (settings.extrude ? u"<extrude>1</extrude>" : u"") % CKmlUtils::wrapAsKmlCoordinates(coordinatesRaw) %
71  u"</LineString>";
72  }
73 } // namespace swift::misc::geo
static const QString & interpolator()
Interpolator.
Definition: logcategories.h:73
static QString asLineString(const QString &coordinatesRaw, const KMLSettings &settings)
As KML line.
Definition: kmlutils.cpp:63
static QString asPlacemark(const QString &name, const QString &description, const geo::ICoordinateGeodetic &coordinate, const KMLSettings &settings)
As KML placemark.
Definition: kmlutils.cpp:53
static QString asRawCoordinates(const geo::ICoordinateGeodetic &coordinate, bool withAltitude)
As raw coordinates.
Definition: kmlutils.cpp:36
static QString wrapAsKmlDocument(const QString &content)
Wrap as KML document.
Definition: kmlutils.cpp:20
static QString wrapAsKmlCoordinates(const QString &content)
Wrap as KML coordinates.
Definition: kmlutils.cpp:31
static QString asPoint(const geo::ICoordinateGeodetic &coordinate, const KMLSettings &settings)
As KML point.
Definition: kmlutils.cpp:43
static const QStringList & getLogCategories()
Log categories.
Definition: kmlutils.cpp:14
Geodetic coordinate, a position in 3D space relative to the reference geoid.
virtual CLongitude longitude() const =0
Longitude.
virtual const aviation::CAltitude & geodeticHeight() const =0
Height, ellipsoidal or geodetic height (used in GPS)
virtual CLatitude latitude() const =0
Latitude.
QString valueRoundedAsString(MU unit, int digits=-1) const
Rounded value in given unit.
Free functions in swift::misc.
QString altitudeMode
Setting members.
Definition: kmlutils.h:35
bool withAltitude
Setting members.
Definition: kmlutils.h:32