Commit fc389249 authored by Ian Humphrey's avatar Ian Humphrey
Browse files

merged in changes to LidarData. Rename read to readCsv

parents e46346de 52130a4f
Loading
Loading
Loading
Loading
+61 −4
Original line number Diff line number Diff line
#include "LidarData.h"

#include <QByteArray>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QList>
#include <QRegExp>
#include <QSharedPointer>
#include <QTextStream>
#include <QStringList>

#include "Angle.h"
#include "Distance.h"
@@ -34,7 +38,7 @@ namespace Isis {
   * @param FileName lidarFile Name of the Lidar CSV file to use.
   */
  LidarData::LidarData(FileName lidarFile) {
    read(lidarFile);
    readCsv(lidarFile);
  }


@@ -59,9 +63,62 @@ namespace Isis {


  /**
   * Reads in a Lidar CSV file.
   * @brief Reads in a Lidar CSV file.
   *
   * @param FileName lidarFile Name of the Lidar CSV file to read.
   * @throws If the header for the file does not contain the correct info,
   *         an IException will be thrown.
   */
  void LidarData::readCsv(FileName lidarFile) {
    QFile data(lidarFile.expanded());

    if (data.open(QIODevice::ReadOnly|QIODevice::Text)) {

      QTextStream datain(&data);
      QString header = datain.readLine();
      QStringList headerCells = header.split(",",QString::KeepEmptyParts);

      QRegExp utc("*Universal*",Qt::CaseInsensitive,QRegExp::Wildcard);
      QRegExp longitude("*Longitude",Qt::CaseInsensitive,QRegExp::Wildcard);
      QRegExp latitude("*Latitude",Qt::CaseInsensitive,QRegExp::Wildcard);
      QRegExp range("*Range",Qt::CaseInsensitive,QRegExp::Wildcard);
      QRegExp shot("S",Qt::CaseInsensitive,QRegExp::Wildcard);
      QRegExp frame("*Frm*",Qt::CaseInsensitive,QRegExp::Wildcard);

      int longIx = headerCells.indexOf(longitude);
      int latIx = headerCells.indexOf(latitude);
      int utcIx = headerCells.indexOf(utc);
      int rangeIx = headerCells.indexOf(range);
      int shotIx = headerCells.indexOf(shot);
      int frameIx = headerCells.indexOf(frame);
      if ( longIx < 0 || latIx < 0 || utcIx < 0 || rangeIx < 0 ||shotIx < 0 || frameIx < 0) {
        QString msg = "Header line in "+lidarFile.expanded() + " is missing expected information.";
          throw IException(IException::Io,msg, _FILEINFO_);
        }

      while (!datain.atEnd() ) {
        QString key;
        QString row = datain.readLine();
        QStringList cells = row.split(",",QString::KeepEmptyParts);
        iTime time(cells[utcIx]);
        QString shot(cells[shotIx]);
        QString frame(cells[frameIx]);
        key = "lrolola"+time.EtString()+"_"+frame+"_"+shot;
        QSharedPointer<LidarControlPoint> pt = QSharedPointer<LidarControlPoint>
            (new LidarControlPoint(time,cells[rangeIx].toDouble(),0.0));

        m_points.insert(key,pt);
      }
    }
  }


  /**
   * @brief Reads in a Lidar CSV file.
   *
   * @param FileName lidarFile Name of the Lidar CSV file to read.
   * @throws If the header for the file does not contain the correct info,
   *         an IException will be thrown.
   */
  void LidarData::read(FileName lidarFile) {
    // Set up the input file
@@ -175,10 +232,10 @@ namespace Isis {
  void LidarData::write(FileName outputFile, LidarData::Format format) {
    // Set up the output file
    if (format == Json) {
      outputFile = outputFile.setExtension(".json");
      outputFile = outputFile.setExtension("json");
    }
    else {
      outputFile = outputFile.setExtension(".dat");
      outputFile = outputFile.setExtension("dat");
    }
    QFile saveFile(outputFile.expanded());

+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ namespace Isis {
   *
   * @internal
   *   @history 2018-01-29 Ian Humphrey - original version.
   *   @history 2018-01-31 Tyler Wilson - Implemented Lidar::read(Filename &).
   *   @history 2018-01-31 Ian Humphrey - Added insert method to insert a LidarControlPoint into
   *                           the LidarData. Added documentation for m_points.
   */
@@ -34,8 +35,9 @@ namespace Isis {
      LidarData();
      LidarData(FileName);

      void insert(QSharedPointer<LidarControlPoint> point);
      void readCsv(FileName);

      void insert(QSharedPointer<LidarControlPoint> point);
      QList< QSharedPointer<LidarControlPoint> > points() const;

      void read(FileName);
+6 −1
Original line number Diff line number Diff line
@@ -30,6 +30,10 @@ int main(int argc, char *argv[]) {
  // Set up our unit test preferences
  Preference::Preferences(true);

  LidarData data;
  FileName csvFile("RDR_98E100E_60N62NPointPerRow_csv_table-original.csv");
  data.readCsv(csvFile);

  // Test LidarData()
  cout << "Testing default constructor... " << endl;
  LidarData defaultData;
@@ -105,10 +109,11 @@ int main(int argc, char *argv[]) {
  // Test read()
  cout << "Testing read(FileName) from JSON data... " << endl;
  LidarData fromJson;
  outputFile = outputFile.setExtension(".json");
  outputFile = outputFile.setExtension("json");
  fromJson.read(outputFile);
  print(fromJson);
  cout << endl;

}