You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
5.1 KiB
142 lines
5.1 KiB
/* ============================================================
|
|
*
|
|
* This file is a part of kipi-plugins project
|
|
* http://www.kipi-plugins.org
|
|
*
|
|
* Date : 2006-05-16
|
|
* Description : a tool to export GPS data to KML file.
|
|
*
|
|
* Copyright (C) 2006-2007 by Stephane Pontier <shadow dot walker at free dot fr>
|
|
*
|
|
* This program is free software; you can redistribute it
|
|
* and/or modify it under the terms of the GNU General
|
|
* Public License as published by the Free Software Foundation;
|
|
* either version 2, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* ============================================================ */
|
|
|
|
// Local includes.
|
|
|
|
#include "kmlgpsdataparser.h"
|
|
|
|
// KDE includes.
|
|
|
|
#include <kdebug.h>
|
|
#include <tdelocale.h>
|
|
|
|
namespace KIPIGPSSyncPlugin
|
|
{
|
|
|
|
KMLGPSDataParser::KMLGPSDataParser()
|
|
: GPSDataParser()
|
|
{
|
|
}
|
|
|
|
KMLGPSDataParser::~KMLGPSDataParser()
|
|
{
|
|
}
|
|
|
|
TQString KMLGPSDataParser::lineString()
|
|
{
|
|
TQString line = "";
|
|
// cache the end to not recalculate it with large number of points
|
|
GPSDataMap::ConstIterator end (m_GPSDataMap.constEnd());
|
|
for (GPSDataMap::ConstIterator it = m_GPSDataMap.constBegin();
|
|
it != end; ++it )
|
|
{
|
|
line += TQString("%1,%2,%3 ").arg(it.data().longitude()).arg(it.data().latitude()).arg(it.data().altitude());
|
|
}
|
|
return line;
|
|
}
|
|
|
|
/*!
|
|
\fn void KIPIGPSSyncPlugin::KMLGPSDataParser::CreateTrackLine(TQDomElement &parent, TQDomDocument &root, int altitudeMode)
|
|
*/
|
|
void KIPIGPSSyncPlugin::KMLGPSDataParser::CreateTrackLine(TQDomElement &parent, TQDomDocument &root, int altitudeMode)
|
|
{
|
|
kmlDocument = &root;
|
|
|
|
// add the linetrack
|
|
TQDomElement kmlPlacemark = addKmlElement(parent, "Placemark");
|
|
addKmlTextElement(kmlPlacemark, "name", i18n("Track"));
|
|
TQDomElement kmlLineString = addKmlElement(kmlPlacemark, "LineString");
|
|
addKmlTextElement(kmlLineString, "coordinates", lineString());
|
|
addKmlTextElement(kmlPlacemark, "styleUrl", "#linetrack");
|
|
if (altitudeMode == 2 )
|
|
{
|
|
addKmlTextElement(kmlLineString, "altitudeMode", "absolute");
|
|
}
|
|
else if (altitudeMode == 1 )
|
|
{
|
|
addKmlTextElement(kmlLineString, "altitudeMode", "relativeToGround");
|
|
}
|
|
else
|
|
{
|
|
addKmlTextElement(kmlLineString, "altitudeMode", "clampToGround");
|
|
}
|
|
}
|
|
|
|
/*!
|
|
\fn void KIPIGPSSyncPlugin::KMLGPSDataParser::CreateTrackPoints(TQDomElement &parent, TQDomDocument &root, int timeZone, int altitudeMode)
|
|
*/
|
|
void KIPIGPSSyncPlugin::KMLGPSDataParser::CreateTrackPoints(TQDomElement &parent, TQDomDocument &root,
|
|
int timeZone, int altitudeMode)
|
|
{
|
|
kmlDocument = &root;
|
|
kdDebug( 51001 ) << "creation d'un trackpoint" << endl;
|
|
|
|
// create the points
|
|
TQDomElement kmlPointsFolder = addKmlElement(parent, "Folder");
|
|
addKmlTextElement(kmlPointsFolder, "name", i18n("Points"));
|
|
addKmlTextElement(kmlPointsFolder, "visibility", "0");
|
|
addKmlTextElement(kmlPointsFolder, "open", "0");
|
|
int i = 0;
|
|
// cache the end to not recalculate it with large number of points
|
|
GPSDataMap::ConstIterator end (m_GPSDataMap.constEnd());
|
|
for (GPSDataMap::ConstIterator it = m_GPSDataMap.constBegin();
|
|
it != end; ++it, i++)
|
|
{
|
|
TQDomElement kmlPointPlacemark = addKmlElement(kmlPointsFolder, "Placemark");
|
|
addKmlTextElement(kmlPointPlacemark, "name", TQString("%1 %2 ").arg(i18n("Point")).arg(i));
|
|
addKmlTextElement(kmlPointPlacemark, "styleUrl", "#track");
|
|
TQDomElement kmlTimeStamp = addKmlElement(kmlPointPlacemark, "TimeStamp");
|
|
// GPS device are sync in time by satellite using GMT time.
|
|
// If the camera time is different than GMT time, we want to
|
|
// convert the GPS time to localtime of the picture to be display
|
|
// in the same timeframe
|
|
TQDateTime GPSLocalizedTime = it.key().addSecs(timeZone*3600);
|
|
|
|
addKmlTextElement(kmlTimeStamp, "when", GPSLocalizedTime.toString("yyyy-MM-ddThh:mm:ssZ"));
|
|
TQDomElement kmlGeometry = addKmlElement(kmlPointPlacemark, "Point");
|
|
addKmlTextElement(kmlPointPlacemark, "visibility", "0");
|
|
if (it.data().latitude())
|
|
{
|
|
addKmlTextElement(kmlGeometry, "coordinates",
|
|
TQString("%1,%2,%3").arg(it.data().longitude()).arg(it.data().latitude()).arg(it.data().altitude()));
|
|
}
|
|
else
|
|
{
|
|
addKmlTextElement(kmlGeometry, "coordinates", TQString("%1,%2").arg(it.data().longitude()).arg(it.data().latitude()));
|
|
}
|
|
if (altitudeMode == 2 )
|
|
{
|
|
addKmlTextElement(kmlGeometry, "altitudeMode", "absolute");
|
|
}
|
|
else if (altitudeMode == 1 )
|
|
{
|
|
addKmlTextElement(kmlGeometry, "altitudeMode", "relativeToGround");
|
|
}
|
|
else
|
|
{
|
|
addKmlTextElement(kmlGeometry, "altitudeMode", "clampToGround");
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace KIPIGPSSyncPlugin
|