QMap<QString, QString> DataInterfaceNetCdfVector::metaStrings(const QString& field) { QMap<QString, QString> fieldStrings; QString tmpString; NcVar *var = netcdf._ncfile->get_var(field.toLatin1().constData()); for (int i=0; i<var->num_atts(); ++i) { NcAtt *att = var->get_att(i); // Only handle char/unspecified attributes as fieldStrings, the others as fieldScalars if (att->type() == NC_CHAR || att->type() == NC_UNSPECIFIED) { fieldStrings[att->name()] = QString(att->values()->as_string(0)); } // qDebug() << att->name() << ": " << att->values()->num() << endl; } return fieldStrings; }
void CopyNcVarAttributes( NcVar * varIn, NcVar * varOut ) { for (int a = 0; a < varIn->num_atts(); a++) { NcAtt * att = varIn->get_att(a); long num_vals = att->num_vals(); NcValues * pValues = att->values(); if (att->type() == ncByte) { varOut->add_att(att->name(), num_vals, (const ncbyte*)(pValues->base())); } else if (att->type() == ncChar) { varOut->add_att(att->name(), num_vals, (const char*)(pValues->base())); } else if (att->type() == ncShort) { varOut->add_att(att->name(), num_vals, (const short*)(pValues->base())); } else if (att->type() == ncInt) { varOut->add_att(att->name(), num_vals, (const int*)(pValues->base())); } else if (att->type() == ncFloat) { varOut->add_att(att->name(), num_vals, (const float*)(pValues->base())); } else if (att->type() == ncDouble) { varOut->add_att(att->name(), num_vals, (const double*)(pValues->base())); } else { _EXCEPTIONT("Invalid attribute type"); } delete pValues; } }
QMap<QString, double> DataInterfaceNetCdfVector::metaScalars(const QString& field) { QMap<QString, double> fieldScalars; NcVar *var = netcdf._ncfile->get_var(field.toLatin1().constData()); fieldScalars["NbAttributes"] = var->num_atts(); for (int i=0; i<var->num_atts(); ++i) { NcAtt *att = var->get_att(i); // Only handle char attributes as fieldStrings, the others as fieldScalars if (att->type() == NC_BYTE || att->type() == NC_SHORT || att->type() == NC_INT || att->type() == NC_LONG || att->type() == NC_FLOAT || att->type() == NC_DOUBLE) { // Some attributes may have multiple values => load the first as is, and for the others // add a -2, -3, etc... suffix as obviously we can have only one value per scalar. // Do it in two steps to avoid a test in the loop while keeping a "clean" name for the first one fieldScalars[QString(att->name())] = att->values()->as_double(0); for (int j=1; j<att->values()->num(); ++j) { fieldScalars[QString(att->name()) + QString("-") + QString::number(j+1)] = att->values()->as_double(j); } } } return fieldScalars; }