5#include <QtPositioning/QGeoCoordinate>
11 const QDomProcessingInstruction header = createProcessingInstruction(QStringLiteral(
"xml"), QStringLiteral(
"version=\"1.0\" encoding=\"UTF-8\""));
12 (void) appendChild(header);
14 QDomElement kmlElement = createElement(QStringLiteral(
"kml"));
15 kmlElement.setAttribute(QStringLiteral(
"xmlns"), kmlNamespace);
16 kmlElement.setAttribute(QStringLiteral(
"xmlns:xsi"), xsiNamespace);
17 kmlElement.setAttribute(QStringLiteral(
"xsi:schemaLocation"),
18 QStringLiteral(
"%1 %2").arg(kmlNamespace, kmlSchemaLocation));
20 _rootDocumentElement = createElement(QStringLiteral(
"Document"));
21 (void) kmlElement.appendChild(_rootDocumentElement);
22 (void) appendChild(kmlElement);
24 addTextElement(_rootDocumentElement,
"name", name);
25 addTextElement(_rootDocumentElement,
"open",
"1");
32 const double altitude = qIsNaN(coord.altitude()) ? 0 : coord.altitude();
33 return QStringLiteral(
"%1,%2,%3").arg(QString::number(coord.longitude(),
'f', 7), QString::number(coord.latitude(),
'f', 7), QString::number(altitude,
'f', 2));
38 return QStringLiteral(
"%1%2%3%4").arg(
static_cast<int>(255.0 * opacity), 2, 16, QChar(
'0')).arg(color.blue(), 2, 16, QChar(
'0')).arg(color.green(), 2, 16, QChar(
'0')).arg(color.red(), 2, 16, QChar(
'0'));
41void KMLDomDocument::_addStandardStyles()
43 QDomElement styleElementForBalloon = createElement(
"Style");
45 QDomElement balloonStyleElement = createElement(
"BalloonStyle");
47 (void) styleElementForBalloon.appendChild(balloonStyleElement);
53 QDomElement textElement = createElement(name);
54 (void) textElement.appendChild(createTextNode(value));
55 (void) parentElement.appendChild(textElement);
60 QDomElement lookAtElement = createElement(
"LookAt");
61 addTextElement(lookAtElement,
"latitude", QString::number(coord.latitude(),
'f', 7));
62 addTextElement(lookAtElement,
"longitude", QString::number(coord.longitude(),
'f', 7));
63 const double altitude = qIsNaN(coord.altitude()) ? 0 : coord.altitude();
64 addTextElement(lookAtElement,
"altitude", QString::number(altitude,
'f', 2));
68 (void) parentElement.appendChild(lookAtElement);
73 QDomElement placemarkElement = createElement(
"Placemark");
77 addTextElement(placemarkElement,
"visibility", visible ?
"1" :
"0");
79 return placemarkElement;
89 QDomElement folderElement = createElement(
"Folder");
97 QDomElement descriptionElement = createElement(
"description");
98 QDomCDATASection cdataSection = createCDATASection(content);
99 (void) descriptionElement.appendChild(cdataSection);
100 (void) parent.appendChild(descriptionElement);
105 QDomElement styleElement = createElement(
"Style");
106 styleElement.setAttribute(
"id",
id);
113 QDomElement lineStyleElement = createElement(
"LineStyle");
115 addTextElement(lineStyleElement,
"width", QString::number(width));
116 (void) styleElement.appendChild(lineStyleElement);
121 QDomElement polyStyleElement = createElement(
"PolyStyle");
123 (void) styleElement.appendChild(polyStyleElement);
127 const QString &altitudeMode,
bool extrude)
129 QDomElement pointElement = createElement(
"Point");
133 (void) parent.appendChild(pointElement);
138 const QString &altitudeMode,
bool extrude,
bool tessellate)
140 QDomElement lineStringElement = createElement(
"LineString");
141 addTextElement(lineStringElement,
"extrude", extrude ?
"1" :
"0");
142 addTextElement(lineStringElement,
"tessellate", tessellate ?
"1" :
"0");
146 for (
const QGeoCoordinate &coord : coords) {
151 (void) parent.appendChild(lineStringElement);
152 return lineStringElement;
156 const QString &altitudeMode)
158 QDomElement polygonElement = createElement(
"Polygon");
161 QDomElement outerBoundaryIs = createElement(
"outerBoundaryIs");
162 QDomElement linearRing = createElement(
"LinearRing");
165 for (
const QGeoCoordinate &coord : coords) {
169 if (!coords.isEmpty()) {
170 coordString += QStringLiteral(
"%1\n").arg(
kmlCoordString(coords.first()));
174 (void) outerBoundaryIs.appendChild(linearRing);
175 (void) polygonElement.appendChild(outerBoundaryIs);
176 (void) parent.appendChild(polygonElement);
177 return polygonElement;
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Used to convert a Plan to a KML document.
void addPolyStyle(QDomElement &styleElement, const QColor &color, double opacity=1.0)
void addLineStyle(QDomElement &styleElement, const QColor &color, int width=1, double opacity=1.0)
void addLookAt(QDomElement &parentElement, const QGeoCoordinate &coord)
QDomElement addPolygon(QDomElement &parent, const QList< QGeoCoordinate > &coords, const QString &altitudeMode=QLatin1String("clampToGround"))
static QString kmlCoordString(const QGeoCoordinate &coord)
static QString kmlColorString(const QColor &color, double opacity=1)
void appendChildToRoot(const QDomNode &child)
QDomElement _rootDocumentElement
QDomElement addFolder(const QString &name)
QDomElement addLineString(QDomElement &parent, const QList< QGeoCoordinate > &coords, const QString &altitudeMode=QLatin1String("absolute"), bool extrude=true, bool tessellate=true)
QDomElement addPoint(QDomElement &parent, const QGeoCoordinate &coord, const QString &altitudeMode=QLatin1String("absolute"), bool extrude=true)
void addTextElement(QDomElement &parentElement, const QString &name, const QString &value)
void addDescription(QDomElement &parent, const QString &content)
static constexpr const char * balloonStyleName
QDomElement addPlacemark(const QString &name, bool visible)
QDomElement addStyle(const QString &id)