Loading isis/src/base/objs/LidarData/LidarData.cpp +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" Loading Loading @@ -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); } Loading @@ -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 Loading Loading @@ -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()); Loading isis/src/base/objs/LidarData/LidarData.h +3 −1 Original line number Diff line number Diff line Loading @@ -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. */ Loading @@ -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); Loading isis/src/base/objs/LidarData/unitTest.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading
isis/src/base/objs/LidarData/LidarData.cpp +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" Loading Loading @@ -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); } Loading @@ -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 Loading Loading @@ -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()); Loading
isis/src/base/objs/LidarData/LidarData.h +3 −1 Original line number Diff line number Diff line Loading @@ -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. */ Loading @@ -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); Loading
isis/src/base/objs/LidarData/unitTest.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading