4 changed files with 174 additions and 0 deletions
@ -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 @@ |
|||||||
|
/****************************************************************************
|
||||||
|
* |
||||||
|
* (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