/*!
* \file kml_printer.cc
* \brief Implementation of a class that prints PVT information to a kml file
* \author Javier Arribas, 2011. jarribas(at)cttc.es
*
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR 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 3 of the License, or
* (at your option) any later version.
*
* GNSS-SDR 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.
*
* You should have received a copy of the GNU General Public License
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
*/
#include "kml_printer.h"
#include
#include
#include
using google::LogMessage;
bool Kml_Printer::set_headers(std::string filename, bool time_tag_name)
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
if (time_tag_name)
{
std::stringstream strm0;
const int year = timeinfo->tm_year - 100;
strm0 << year;
const int month = timeinfo->tm_mon + 1;
if(month < 10)
{
strm0 << "0";
}
strm0 << month;
const int day = timeinfo->tm_mday;
if(day < 10)
{
strm0 << "0";
}
strm0 << day << "_";
const int hour = timeinfo->tm_hour;
if(hour < 10)
{
strm0 << "0";
}
strm0 << hour;
const int min = timeinfo->tm_min;
if(min < 10)
{
strm0 << "0";
}
strm0 << min;
const int sec = timeinfo->tm_sec;
if(sec < 10)
{
strm0 << "0";
}
strm0 << sec;
kml_filename = filename + "_" + strm0.str() + ".kml";
}
else
{
kml_filename = filename + ".kml";
}
kml_file.open(kml_filename.c_str());
if (kml_file.is_open())
{
DLOG(INFO) << "KML printer writing on " << filename.c_str();
// Set iostream numeric format and precision
kml_file.setf(kml_file.fixed, kml_file.floatfield);
kml_file << std::setprecision(14);
kml_file << "" << std::endl
<< "" << std::endl
<< " " << std::endl
<< " GNSS Track" << std::endl
<< " GNSS-SDR Receiver position log file created at " << asctime (timeinfo)
<< " " << std::endl
<< "" << std::endl
<< "" << std::endl
<< "GNSS-SDR PVT" << std::endl
<< "GNSS-SDR position log" << std::endl
<< "#yellowLineGreenPoly" << std::endl
<< "" << std::endl
<< "0" << std::endl
<< "1" << std::endl
<< "absolute" << std::endl
<< "" << std::endl;
return true;
}
else
{
return false;
}
}
bool Kml_Printer::print_position(const std::shared_ptr& position, bool print_average_values)
{
double latitude;
double longitude;
double height;
positions_printed = true;
std::shared_ptr position_ = position;
if (print_average_values == false)
{
latitude = position_->d_latitude_d;
longitude = position_->d_longitude_d;
height = position_->d_height_m;
}
else
{
latitude = position_->d_avg_latitude_d;
longitude = position_->d_avg_longitude_d;
height = position_->d_avg_height_m;
}
if (kml_file.is_open())
{
kml_file << longitude << "," << latitude << "," << height << std::endl;
return true;
}
else
{
return false;
}
}
bool Kml_Printer::close_file()
{
if (kml_file.is_open())
{
kml_file << "" << std::endl
<< "" << std::endl
<< "" << std::endl
<< "" << std::endl
<< "";
kml_file.close();
return true;
}
else
{
return false;
}
}
Kml_Printer::Kml_Printer ()
{
positions_printed = false;
}
Kml_Printer::~Kml_Printer ()
{
close_file();
if(!positions_printed)
{
if(remove(kml_filename.c_str()) != 0) LOG(INFO) << "Error deleting temporary KML file";
}
}