/**************************************************************************** * * (c) 2009-2016 QGROUNDCONTROL PROJECT * * QGroundControl is licensed according to the terms in the file * COPYING.md in the root of the source code directory. * ****************************************************************************/ #include "KML.h" #include #include 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) { // textElement 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) { /* 7f00ffff 4 7f00ff00 */ 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() { }