5 #include <google/protobuf/io/zero_copy_stream_impl.h> 
    6 #include <google/protobuf/io/coded_stream.h> 
    8 #include "ControlNetFileV0001.pb.h" 
   18 using namespace google::protobuf;
 
   19 using namespace google::protobuf::io;
 
   23   ControlNetFileV0001::ControlNetFileV0001() {
 
   24     p_network = 
new ControlNetFileProtoV0001;
 
   25     p_logData = 
new ControlNetLogDataProtoV0001;
 
   29   ControlNetFileV0001::~ControlNetFileV0001() {
 
   35   void ControlNetFileV0001::Read(
const Pvl &head, 
const FileName &file) {
 
   39     BigInt coreStartPos = protoBufferCore[
"StartByte"];
 
   40     BigInt coreLength = protoBufferCore[
"Bytes"];
 
   42     fstream input(file.expanded().toLatin1().data(), ios::in | ios::binary);
 
   43     if (!input.is_open()) {
 
   44       IString msg = 
"Failed to open PB file" + file.name();
 
   48     input.seekg(coreStartPos, ios::beg);
 
   49     IstreamInputStream inStream(&input);
 
   50     CodedInputStream codedInStream(&inStream);
 
   51     codedInStream.PushLimit(coreLength);
 
   53     codedInStream.SetTotalBytesLimit(1024 * 1024 * 512, 1024 * 1024 * 400);
 
   57       if (!p_network->ParseFromCodedStream(&codedInStream)) {
 
   58         IString msg = 
"Failed to read input PB file " + file.name();
 
   63       string msg = 
"Cannot parse binary PB file";
 
   67       string msg = 
"Cannot parse binary PB file";
 
   72     BigInt logStartPos = logDataInfo[
"StartByte"];
 
   73     BigInt logLength = logDataInfo[
"Bytes"];
 
   76     input.seekg(logStartPos, ios::beg);
 
   77     IstreamInputStream logInStream(&input);
 
   78     CodedInputStream codedLogInStream(&logInStream);
 
   79     codedLogInStream.PushLimit(logLength);
 
   81     codedLogInStream.SetTotalBytesLimit(1024 * 1024 * 512, 1024 * 1024 * 400);
 
   85       if (!p_logData->ParseFromCodedStream(&codedLogInStream)) {
 
   86         IString msg = 
"Failed to read log data in PB file [" + file.name() + 
"]";
 
   91       string msg = 
"Cannot parse binary PB file's log data";
 
   97   Pvl ControlNetFileV0001::toPvl()
 const {
 
  102     network += 
PvlKeyword(
"NetworkId", p_network->networkid().c_str());
 
  103     network += 
PvlKeyword(
"TargetName", p_network->targetname().c_str());
 
  104     network += 
PvlKeyword(
"UserName", p_network->username().c_str());
 
  105     network += 
PvlKeyword(
"Created", p_network->created().c_str());
 
  106     network += 
PvlKeyword(
"LastModified", p_network->lastmodified().c_str());
 
  107     network += 
PvlKeyword(
"Description", p_network->description().c_str());
 
  112     for (
int i = 0; i < p_network->points_size(); i++) {
 
  114           p_network->points(i);
 
  117       if(binaryPoint.type() == ControlNetFileProtoV0001_PBControlPoint::Ground)
 
  118         pvlPoint += 
PvlKeyword(
"PointType", 
"Ground");
 
  122       pvlPoint += 
PvlKeyword(
"PointId", binaryPoint.id().c_str());
 
  123       pvlPoint += 
PvlKeyword(
"ChooserName", binaryPoint.choosername().c_str());
 
  124       pvlPoint += 
PvlKeyword(
"DateTime", binaryPoint.datetime().c_str());
 
  126       if (binaryPoint.editlock()) {
 
  130       if (binaryPoint.ignore()) {
 
  134       switch (binaryPoint.apriorisurfpointsource()) {
 
  135         case ControlNetFileProtoV0001_PBControlPoint::None:
 
  137         case ControlNetFileProtoV0001_PBControlPoint::User:
 
  138           pvlPoint += 
PvlKeyword(
"AprioriXYZSource", 
"User");
 
  140         case ControlNetFileProtoV0001_PBControlPoint::AverageOfMeasures:
 
  141           pvlPoint += 
PvlKeyword(
"AprioriXYZSource", 
"AverageOfMeasures");
 
  143         case ControlNetFileProtoV0001_PBControlPoint::Reference:
 
  144           pvlPoint += 
PvlKeyword(
"AprioriXYZSource", 
"Reference");
 
  146         case ControlNetFileProtoV0001_PBControlPoint::Basemap:
 
  147           pvlPoint += 
PvlKeyword(
"AprioriXYZSource", 
"Basemap");
 
  149         case ControlNetFileProtoV0001_PBControlPoint::BundleSolution:
 
  150           pvlPoint += 
PvlKeyword(
"AprioriXYZSource", 
"BundleSolution");
 
  152         case ControlNetFileProtoV0001_PBControlPoint::Ellipsoid:
 
  153         case ControlNetFileProtoV0001_PBControlPoint::DEM:
 
  157       if (binaryPoint.has_apriorisurfpointsourcefile())
 
  158         pvlPoint += 
PvlKeyword(
"AprioriXYZSourceFile",
 
  159                         binaryPoint.apriorisurfpointsourcefile().c_str());
 
  161       switch (binaryPoint.aprioriradiussource()) {
 
  162         case ControlNetFileProtoV0001_PBControlPoint::None:
 
  164         case ControlNetFileProtoV0001_PBControlPoint::User:
 
  165           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"User");
 
  167         case ControlNetFileProtoV0001_PBControlPoint::AverageOfMeasures:
 
  168           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"AverageOfMeasures");
 
  170         case ControlNetFileProtoV0001_PBControlPoint::Reference:
 
  171           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"Reference");
 
  173         case ControlNetFileProtoV0001_PBControlPoint::Basemap:
 
  174           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"Basemap");
 
  176         case ControlNetFileProtoV0001_PBControlPoint::BundleSolution:
 
  177           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"BundleSolution");
 
  179         case ControlNetFileProtoV0001_PBControlPoint::Ellipsoid:
 
  180           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"Ellipsoid");
 
  182         case ControlNetFileProtoV0001_PBControlPoint::DEM:
 
  183           pvlPoint += 
PvlKeyword(
"AprioriRadiusSource", 
"DEM");
 
  187       if (binaryPoint.has_aprioriradiussourcefile())
 
  188         pvlPoint += 
PvlKeyword(
"AprioriRadiusSourceFile",
 
  189                         binaryPoint.aprioriradiussourcefile().c_str());
 
  191       if(binaryPoint.has_apriorix()) {
 
  196         if(binaryPoint.aprioricovar_size()) {
 
  198           matrix += 
toString(binaryPoint.aprioricovar(0));
 
  199           matrix += 
toString(binaryPoint.aprioricovar(1));
 
  200           matrix += 
toString(binaryPoint.aprioricovar(2));
 
  201           matrix += 
toString(binaryPoint.aprioricovar(3));
 
  202           matrix += 
toString(binaryPoint.aprioricovar(4));
 
  203           matrix += 
toString(binaryPoint.aprioricovar(5));
 
  208       if(binaryPoint.latitudeconstrained() &&
 
  209          (binaryPoint.aprioricovar_size() || binaryPoint.adjustedcovar_size()))
 
  210         pvlPoint += 
PvlKeyword(
"LatitudeConstrained", 
"True");
 
  212       if(binaryPoint.longitudeconstrained() &&
 
  213          (binaryPoint.aprioricovar_size() || binaryPoint.adjustedcovar_size()))
 
  214         pvlPoint += 
PvlKeyword(
"LongitudeConstrained", 
"True");
 
  216       if(binaryPoint.radiusconstrained() &&
 
  217          (binaryPoint.aprioricovar_size() || binaryPoint.adjustedcovar_size()))
 
  218         pvlPoint += 
PvlKeyword(
"RadiusConstrained", 
"True");
 
  220       if(binaryPoint.has_adjustedx()) {
 
  225         if(binaryPoint.adjustedcovar_size()) {
 
  226           PvlKeyword matrix(
"AdjustedCovarianceMatrix");
 
  227           matrix += 
toString(binaryPoint.adjustedcovar(0));
 
  228           matrix += 
toString(binaryPoint.adjustedcovar(1));
 
  229           matrix += 
toString(binaryPoint.adjustedcovar(2));
 
  230           matrix += 
toString(binaryPoint.adjustedcovar(3));
 
  231           matrix += 
toString(binaryPoint.adjustedcovar(4));
 
  232           matrix += 
toString(binaryPoint.adjustedcovar(5));
 
  237       for (
int j = 0; j < binaryPoint.measures_size(); j++) {
 
  238         PvlGroup pvlMeasure(
"ControlMeasure");
 
  240             binaryMeasure = binaryPoint.measures(j);
 
  241         pvlMeasure += 
PvlKeyword(
"SerialNumber", binaryMeasure.serialnumber().c_str());
 
  243         switch(binaryMeasure.type()) {
 
  244           case ControlNetFileProtoV0001_PBControlPoint_PBControlMeasure_MeasureType_Candidate:
 
  245             pvlMeasure += 
PvlKeyword(
"MeasureType", 
"Candidate");
 
  247           case ControlNetFileProtoV0001_PBControlPoint_PBControlMeasure_MeasureType_Manual:
 
  248             pvlMeasure += 
PvlKeyword(
"MeasureType", 
"Manual");
 
  250           case ControlNetFileProtoV0001_PBControlPoint_PBControlMeasure_MeasureType_RegisteredPixel:
 
  251             pvlMeasure += 
PvlKeyword(
"MeasureType", 
"RegisteredPixel");
 
  253           case ControlNetFileProtoV0001_PBControlPoint_PBControlMeasure_MeasureType_RegisteredSubPixel:
 
  254             pvlMeasure += 
PvlKeyword(
"MeasureType", 
"RegisteredSubPixel");
 
  258         pvlMeasure += 
PvlKeyword(
"ChooserName", binaryMeasure.choosername().c_str());
 
  259         pvlMeasure += 
PvlKeyword(
"DateTime", binaryMeasure.datetime().c_str());
 
  261         if(binaryMeasure.editlock())
 
  264         if(binaryMeasure.ignore())
 
  267         if(binaryMeasure.has_measurement()) {
 
  271           if (binaryMeasure.measurement().has_sampleresidual())
 
  273                 toString(binaryMeasure.measurement().sampleresidual()), 
"pixels");
 
  275           if (binaryMeasure.measurement().has_lineresidual())
 
  277                 toString(binaryMeasure.measurement().lineresidual()), 
"pixels");
 
  280         if (binaryMeasure.has_diameter())
 
  283         if (binaryMeasure.has_apriorisample())
 
  286         if (binaryMeasure.has_aprioriline())
 
  289         if (binaryMeasure.has_samplesigma())
 
  292         if (binaryMeasure.has_samplesigma())
 
  295          for (
int logEntry = 0;
 
  297                p_logData->points(i).measures(j).loggedmeasuredata_size();
 
  300                p_logData->points(i).measures(j).loggedmeasuredata(logEntry);
 
  310         if(binaryPoint.has_referenceindex() &&
 
  311            binaryPoint.referenceindex() == j)
 
  312           pvlMeasure += 
PvlKeyword(
"Reference", 
"True");
 
  314         pvlPoint.addGroup(pvlMeasure);
 
  317       network.addObject(pvlPoint);
 
void clear()
Remove everything from the current PvlObject. 
 
File name manipulation and expansion. 
 
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes. 
 
Statistical and similar ControlMeasure associated information. 
 
QString toString(bool boolToConvert)
Global function to convert a boolean to a string. 
 
void addObject(const PvlObject &object)
Add a PvlObject. 
 
Contains multiple PvlContainers. 
 
#define _FILEINFO_
Macro for the filename and line number. 
 
A single keyword-value pair. 
 
Container for cube-like labels. 
 
Adds specific functionality to C++ strings. 
 
Contains Pvl Groups and Pvl Objects. 
 
PvlKeyword ToKeyword() const 
This converts the log data to a PvlKeyword.