Commit 84af3fa5 authored by Ian Humphrey's avatar Ian Humphrey
Browse files

udpated LidarData to support JSON and binary serialization

parent 5d22a1e0
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ namespace Isis {
   * @param FileName lidarFile Name of the Lidar CSV file to use.
   */
  LidarData::LidarData(FileName lidarFile) {

    read(lidarFile);
  }


@@ -65,6 +65,7 @@ namespace Isis {
   */
  void LidarData::read(FileName lidarFile) {
    // Set up the input file

    QFile loadFile(lidarFile.expanded());

    if (!loadFile.open(QIODevice::ReadOnly)) {
@@ -76,6 +77,9 @@ namespace Isis {
    QByteArray saveData = loadFile.readAll();

    QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
    if (loadDoc.isNull()) {
      loadDoc = QJsonDocument::fromBinaryData(saveData);
    }

    // Unserialize LidarData
    QJsonObject lidarDataObject = loadDoc.object();
@@ -168,8 +172,14 @@ namespace Isis {
   *
   * @param FileName outputFile Name of the file to write to.
   */
  void LidarData::write(FileName outputFile) {
  void LidarData::write(FileName outputFile, LidarData::Format format) {
    // Set up the output file
    if (format == Json) {
      outputFile = outputFile.setExtension(".json");
    }
    else {
      outputFile = outputFile.setExtension(".dat");
    }
    QFile saveFile(outputFile.expanded());

    if (!saveFile.open(QIODevice::WriteOnly)) {
@@ -216,6 +226,11 @@ namespace Isis {

    // Write the JSON to the file
    QJsonDocument lidarDataDoc(lidarDataObject);
    if (format == Json) {
      saveFile.write(lidarDataDoc.toJson());
    }
    else {
      saveFile.write(lidarDataDoc.toBinaryData());
    }
  }
}
+9 −2
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@
#include <QPointer>
#include <QString>

class QJsonObject;

namespace Isis {

  class FileName;
@@ -24,6 +26,11 @@ namespace Isis {
  class LidarData {

    public:
      enum Format {
        Binary,
        Json
      };

      LidarData();
      LidarData(FileName);

@@ -32,7 +39,7 @@ namespace Isis {
      QList< QSharedPointer<LidarControlPoint> > points() const;

      void read(FileName);
      void write(FileName);
      void write(FileName, Format);

    private:
      /** Hash of the LidarControlPoints this class contains. */
+27 −7
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ int main(int argc, char *argv[]) {
  cout << "\tname of point:    " << defaultData.points().first()->GetId() << endl;
  cout << endl;

  // Test write()
  // Test write() JSON format
  cout << "Testing write(FileName)... " << endl;
  LidarData mockData;
  double lat, lon, rad;
@@ -79,15 +79,35 @@ int main(int argc, char *argv[]) {
    }
    mockData.insert(lcp);
  }
  FileName outFile("./test.dat");
  mockData.write(outFile);
  FileName outputFile("./test.json");
  cout << outputFile.extension() << endl;
  mockData.write(outputFile, LidarData::Json);
  cout << endl;

  // Test write() with no data

  // Test read() with no data

  // Test write() binary format
  cout << outputFile.extension() << endl;
  outputFile = outputFile.setExtension("dat");
  cout << outputFile.extension() << endl;
  cout << outputFile.expanded().toStdString() << endl;
  mockData.write(outputFile, LidarData::Binary);

  // Test read() binary format
  cout << "Testing read(FileName) from binary data... " << endl;
  LidarData fromBinary;
  fromBinary.read(outputFile);
  print(fromBinary);
  cout << endl;

  // Test read()
  cout << "Testing read(FileName)... " << endl;
  LidarData readData;
  readData.read(outFile);
  print(readData);
  cout << "Testing read(FileName) from JSON data... " << endl;
  LidarData fromJson;
  outputFile = outputFile.setExtension(".json");
  fromJson.read(outputFile);
  print(fromJson);
  cout << endl;
}