4 changed files with 174 additions and 0 deletions
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#include "KML.h" |
||||
|
||||
#include <QDomDocument> |
||||
#include <QStringList> |
||||
|
||||
const QString Kml::_version("version=\"1.0\""); |
||||
const QString Kml::_encoding("encoding=\"UTF-8\""); |
||||
const QString Kml::_opengis("http://www.opengis.net/kml/2.2"); |
||||
const QString Kml::_qgckml("QGC KML"); |
||||
|
||||
Kml::Kml() |
||||
{ |
||||
//create header
|
||||
createHeader(); |
||||
//name
|
||||
createTextElement(_docEle, "name", _qgckml); |
||||
//open
|
||||
createTextElement(_docEle, "open", "1"); |
||||
//create style
|
||||
createStyles(); |
||||
} |
||||
|
||||
void Kml::points(const QStringList& points) |
||||
{ |
||||
//create placemark
|
||||
QDomElement placemark = _domDocument.createElement("Placemark"); |
||||
_docEle.appendChild(placemark); |
||||
createTextElement(placemark, "styleUrl", "yellowLineGreenPoly"); |
||||
createTextElement(placemark, "name", "Absolute"); |
||||
createTextElement(placemark, "visibility", "0"); |
||||
createTextElement(placemark, "description", "Transparent purple line"); |
||||
|
||||
QStringList latLonAlt = points[0].split(","); |
||||
QStringList lookAtList({latLonAlt[0], latLonAlt[1], "0" \
|
||||
, "-100", "45", "2500"}); |
||||
createLookAt(placemark, lookAtList); |
||||
|
||||
//Add linestring
|
||||
QDomElement lineString = _domDocument.createElement("LineString"); |
||||
placemark.appendChild(lineString); |
||||
|
||||
//extruder
|
||||
createTextElement(lineString, "extruder", "1"); |
||||
createTextElement(lineString, "tessellate", "1"); |
||||
createTextElement(lineString, "altitudeMode", "absolute"); |
||||
QString coordinates; |
||||
for(const auto& point : points) { |
||||
coordinates += point + "\n"; |
||||
} |
||||
createTextElement(lineString, "coordinates", coordinates); |
||||
} |
||||
|
||||
void Kml::save(QDomDocument& document) |
||||
{ |
||||
document = _domDocument; |
||||
} |
||||
|
||||
void Kml::createHeader() |
||||
{ |
||||
QDomProcessingInstruction header = _domDocument.createProcessingInstruction("xml", _version + " " + _encoding); |
||||
_domDocument.appendChild(header); |
||||
QDomElement kml = _domDocument.createElement("kml"); |
||||
kml.setAttribute("xmlns", _opengis); |
||||
_docEle = _domDocument.createElement("Document"); |
||||
kml.appendChild(_docEle); |
||||
_domDocument.appendChild(kml); |
||||
} |
||||
|
||||
void Kml::createStyles() |
||||
{ |
||||
QDomElement style = _domDocument.createElement("Style"); |
||||
style.setAttribute("id", "yellowLineGreenPoly"); |
||||
createStyleLine(style, "7f00ffff", "4", "7f00ff00"); |
||||
_docEle.appendChild(style); |
||||
} |
||||
|
||||
void Kml::createLookAt(QDomElement& placemark, const QStringList &lookAtList) |
||||
{ |
||||
QDomElement lookAt = _domDocument.createElement("LookAt"); |
||||
placemark.appendChild(lookAt); |
||||
createTextElement(lookAt, "longitude", lookAtList[0]); |
||||
createTextElement(lookAt, "latitude", lookAtList[1]); |
||||
createTextElement(lookAt, "altitude", lookAtList[2]); |
||||
createTextElement(lookAt, "heading", lookAtList[3]); |
||||
createTextElement(lookAt, "tilt", lookAtList[4]); |
||||
createTextElement(lookAt, "range", lookAtList[5]); |
||||
} |
||||
|
||||
void Kml::createTextElement(QDomElement& domEle, const QString& elementName, const QString& textElement) |
||||
{ |
||||
// <elementName>textElement</elementName>
|
||||
auto element = _domDocument.createElement(elementName); |
||||
element.appendChild(_domDocument.createTextNode(textElement)); |
||||
domEle.appendChild(element); |
||||
} |
||||
|
||||
void Kml::createStyleLine(QDomElement& domEle, const QString& lineColor, const QString& lineWidth, const QString& polyColor) |
||||
{ |
||||
/*
|
||||
<LineStyle> |
||||
<color>7f00ffff</color> |
||||
<width>4</width> |
||||
</LineStyle> |
||||
<PolyStyle> |
||||
<color>7f00ff00</color> |
||||
</PolyStyle> |
||||
*/ |
||||
auto lineStyle = _domDocument.createElement("LineStyle"); |
||||
auto polyStyle = _domDocument.createElement("PolyStyle"); |
||||
domEle.appendChild(lineStyle); |
||||
domEle.appendChild(polyStyle); |
||||
createTextElement(lineStyle, "color", lineColor); |
||||
createTextElement(lineStyle, "width", lineWidth); |
||||
createTextElement(polyStyle, "color", polyColor); |
||||
} |
||||
|
||||
Kml::~Kml() |
||||
{ |
||||
} |
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#ifndef KML_H |
||||
#define KML_H |
||||
|
||||
#include <QDomDocument> |
||||
#include <QDomElement> |
||||
|
||||
class Kml |
||||
{ |
||||
|
||||
public: |
||||
Kml(); |
||||
~Kml(); |
||||
|
||||
void points(const QStringList& points); |
||||
void polygon(const QStringList& points); |
||||
void save(QDomDocument& document); |
||||
|
||||
private: |
||||
void createHeader(); |
||||
void createLookAt(QDomElement& placemark, const QStringList &lookAtList); |
||||
void createStyles(); |
||||
void createStyleLine(QDomElement& domEle, const QString& lineColor, const QString& lineWidth, const QString& polyColor); |
||||
void createTextElement(QDomElement& domEle, const QString& elementName, const QString& textElement); |
||||
|
||||
QDomDocument _domDocument; |
||||
QDomElement _docEle; |
||||
static const QString _encoding; |
||||
static const QString _opengis; |
||||
static const QString _qgckml; |
||||
static const QString _version; |
||||
}; |
||||
|
||||
#endif |
Loading…
Reference in new issue