本文整理汇总了C++中FactoryResource::getNumWavelengths方法的典型用法代码示例。如果您正苦于以下问题:C++ FactoryResource::getNumWavelengths方法的具体用法?C++ FactoryResource::getNumWavelengths怎么用?C++ FactoryResource::getNumWavelengths使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FactoryResource
的用法示例。
在下文中一共展示了FactoryResource::getNumWavelengths方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: generateResampledLibrary
bool SpectralLibraryManager::generateResampledLibrary(const RasterElement* pRaster)
{
VERIFY(pRaster != NULL);
// check that lib sigs are in same units as the raster element
const RasterDataDescriptor* pDesc = dynamic_cast<const RasterDataDescriptor*>(pRaster->getDataDescriptor());
VERIFY(pDesc != NULL);
const Units* pUnits = pDesc->getUnits();
if (pDesc->getUnits()->getUnitType() != mLibraryUnitType)
{
if (Service<DesktopServices>()->showMessageBox("Mismatched Units", "The data are not in the "
"same units as the spectral library.\n Do you want to continue anyway?", "Yes", "No") == 1)
{
return false;
}
}
FactoryResource<Wavelengths> pWavelengths;
pWavelengths->initializeFromDynamicObject(pRaster->getMetadata(), false);
// populate the library with the resampled signatures
PlugInResource pPlugIn("Resampler");
Resampler* pResampler = dynamic_cast<Resampler*>(pPlugIn.get());
VERIFY(pResampler != NULL);
if (pWavelengths->getNumWavelengths() != pDesc->getBandCount())
{
mpProgress->updateProgress("Wavelength information in metadata does not match the number of bands "
"in the raster element", 0, ERRORS);
return false;
}
// get resample suitable signatures - leave out signatures that don't cover the spectral range of the data
std::vector<std::vector<double> > resampledData;
resampledData.reserve(mSignatures.size());
std::vector<Signature*> resampledSignatures;
resampledSignatures.reserve(mSignatures.size());
std::vector<std::string> unsuitableSignatures;
std::vector<double> sigValues;
std::vector<double> sigWaves;
std::vector<double> rasterWaves = pWavelengths->getCenterValues();
std::vector<double> rasterFwhm = pWavelengths->getFwhm();
std::vector<double> resampledValues;
std::vector<int> bandIndex;
DataVariant data;
for (std::vector<Signature*>::const_iterator it = mSignatures.begin(); it != mSignatures.end(); ++it)
{
data = (*it)->getData(SpectralLibraryMatch::getNameSignatureWavelengthData());
VERIFY(data.isValid());
VERIFY(data.getValue(sigWaves));
resampledValues.clear();
data = (*it)->getData(SpectralLibraryMatch::getNameSignatureAmplitudeData());
VERIFY(data.isValid());
VERIFY(data.getValue(sigValues));
double scaleFactor = (*it)->getUnits(
SpectralLibraryMatch::getNameSignatureAmplitudeData())->getScaleFromStandard();
for (std::vector<double>::iterator sit = sigValues.begin(); sit != sigValues.end(); ++sit)
{
*sit *= scaleFactor;
}
std::string msg;
if (pResampler->execute(sigValues, resampledValues, sigWaves, rasterWaves, rasterFwhm, bandIndex, msg) == false
|| resampledValues.size() != rasterWaves.size())
{
unsuitableSignatures.push_back((*it)->getName());
continue;
}
resampledData.push_back(resampledValues);
resampledSignatures.push_back(*it);
}
if (resampledSignatures.empty())
{
std::string errMsg = "None of the signatures in the library cover the spectral range of the data.";
if (mpProgress != NULL)
{
mpProgress->updateProgress(errMsg, 0, ERRORS);
return false;
}
}
if (unsuitableSignatures.empty() == false)
{
std::string warningMsg = "The following library signatures do not cover the spectral range of the data:\n";
for (std::vector<std::string>::iterator it = unsuitableSignatures.begin();
it != unsuitableSignatures.end(); ++it)
{
warningMsg += *it + "\n";
}
warningMsg += "These signatures will not be searched for in the data.";
Service<DesktopServices>()->showMessageBox("SpectralLibraryManager", warningMsg);
StepResource pStep("Spectral LibraryManager", "spectral", "64B6C87A-A6C3-4378-9B6E-221D89D8707B");
pStep->finalize(Message::Unresolved, warningMsg);
}
std::string libName = "Resampled Spectral Library";
// Try to get the resampled lib element in case session was restored. If NULL, create a new raster element with
// num rows = num valid signatures, num cols = 1, num bands = pRaster num bands
//.........这里部分代码省略.........
示例2: validate
//.........这里部分代码省略.........
// Band names
const DynamicObject* pMetadata = pRasterDescriptor->getMetadata();
if ((validationTest & VALID_BAND_NAMES) == VALID_BAND_NAMES)
{
VERIFY(pMetadata != NULL);
string namesPath[] = { SPECIAL_METADATA_NAME, BAND_METADATA_NAME, NAMES_METADATA_NAME, END_METADATA_NAME };
// If band names are present in the metadata, check the number of names against the number of bands
// If band names are not present in the metadata, then succeed
const vector<string>* pBandNames = dv_cast<vector<string> >(&pMetadata->getAttributeByPath(namesPath));
if (pBandNames != NULL)
{
if (pBandNames->size() != pRasterFileDescriptor->getBandCount())
{
errorMessage = "The number of band names in the metadata does not match the number of bands.";
mValidationError = VALID_BAND_NAMES;
return false;
}
}
}
// Wavelengths
if ((validationTest & VALID_WAVELENGTHS) == VALID_WAVELENGTHS)
{
VERIFY(pMetadata != NULL);
// If wavelengths are present in the metadata, check the number of wavelengths against the number of bands
// If wavelengths are not present in the metadata, then succeed
FactoryResource<Wavelengths> pWavelengths;
if (pWavelengths->initializeFromDynamicObject(pMetadata, false) == true)
{
if (pWavelengths->getNumWavelengths() != pRasterFileDescriptor->getBandCount())
{
errorMessage = "The number of wavelengths in the metadata does not match the number of bands.";
mValidationError = VALID_WAVELENGTHS;
return false;
}
}
}
// Interleave conversions
if (validationTest & NO_INTERLEAVE_CONVERSIONS)
{
InterleaveFormatType dataInterleave = pRasterDescriptor->getInterleaveFormat();
InterleaveFormatType fileInterleave = pRasterFileDescriptor->getInterleaveFormat();
if ((pRasterFileDescriptor->getBandCount() > 1) && (dataInterleave != fileInterleave))
{
errorMessage = "Interleave format conversions are not supported.";
mValidationError = NO_INTERLEAVE_CONVERSIONS;
return false;
}
}
// Skip factors
if (validationTest & NO_ROW_SKIP_FACTOR)
{
if (pRasterDescriptor->getRowSkipFactor() > 0)
{
errorMessage = "Row skip factors are not supported.";
mValidationError = NO_ROW_SKIP_FACTOR;
return false;
}
}