本文整理汇总了C++中Projection::IsEquatorialCylindrical方法的典型用法代码示例。如果您正苦于以下问题:C++ Projection::IsEquatorialCylindrical方法的具体用法?C++ Projection::IsEquatorialCylindrical怎么用?C++ Projection::IsEquatorialCylindrical使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Projection
的用法示例。
在下文中一共展示了Projection::IsEquatorialCylindrical方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: StartProcess
/**
* Mosaic Processing method, returns false if the cube is not inside the mosaic
*/
bool ProcessMapMosaic::StartProcess(QString inputFile) {
if (InputCubes.size() != 0) {
QString msg = "Input cubes already exist; do not call SetInputCube when using ";
msg += "ProcessMosaic::StartProcess(QString)";
throw IException(IException::Programmer, msg, _FILEINFO_);
}
if (OutputCubes.size() == 0) {
QString msg = "An output cube must be set before calling StartProcess";
throw IException(IException::Programmer, msg, _FILEINFO_);
}
CubeAttributeInput inAtt(inputFile);
Cube *inCube = ProcessMosaic::SetInputCube(inputFile, inAtt);
Cube *mosaicCube = OutputCubes[0];
Projection *iproj = inCube->projection();
Projection *oproj = mosaicCube->projection();
int nsMosaic = mosaicCube->sampleCount();
int nlMosaic = mosaicCube->lineCount();
if (*iproj != *oproj) {
QString msg = "Mapping groups do not match between cube [" + inputFile + "] and mosaic";
throw IException(IException::User, msg, _FILEINFO_);
}
int outSample, outSampleEnd, outLine, outLineEnd;
outSample = (int)(oproj->ToWorldX(iproj->ToProjectionX(1.0)) + 0.5);
outLine = (int)(oproj->ToWorldY(iproj->ToProjectionY(1.0)) + 0.5);
int ins = InputCubes[0]->sampleCount();
int inl = InputCubes[0]->lineCount();
outSampleEnd = outSample + ins;
outLineEnd = outLine + inl;
bool wrapPossible = iproj->IsEquatorialCylindrical();
int worldSize = 0;
if (wrapPossible) {
// Figure out how many samples 360 degrees is
wrapPossible = wrapPossible && oproj->SetUniversalGround(0, 0);
int worldStart = (int)(oproj->WorldX() + 0.5);
wrapPossible = wrapPossible && oproj->SetUniversalGround(0, 180);
int worldEnd = (int)(oproj->WorldX() + 0.5);
worldSize = abs(worldEnd - worldStart) * 2;
wrapPossible = wrapPossible && (worldSize > 0);
// This is EquatorialCylindrical, so shift to the left all the way
if (wrapPossible) {
// While some data would still be put in the mosaic, move left
// >1 for end because 0 still means no data, whereas 1 means 1 line of data
while (outSampleEnd - worldSize > 1) {
outSample -= worldSize;
outSampleEnd -= worldSize;
}
// Now we have the sample range to the furthest left
}
}
// Check overlaps of input image along the mosaic edges before
// calling ProcessMosaic::StartProcess
// Left edge
if (outSample < 1) {
ins = ins + outSample - 1;
}
// Top edge
if (outLine < 1) {
inl = inl + outLine - 1;
}
// Right edge
if ((outSample + ins - 1) > nsMosaic) {
ins = nsMosaic - outSample + 1;
}
// Bottom edge
if ((outLine + inl - 1) > nlMosaic) {
inl = nlMosaic - outLine + 1;
}
if (outSampleEnd < 1 || outLineEnd < 1 || outSample > nsMosaic || outLine > nlMosaic || ins < 1 || inl < 1) {
// Add a PvlKeyword naming which files are not included in output mosaic
ClearInputCubes();
return false;
}
else {
// Place the input in the mosaic
Progress()->SetText("Mosaicking " + FileName(inputFile).name());
try {
do {
int outBand = 1;
ProcessMosaic::StartProcess(outSample, outLine, outBand);
// Increment for projections where occurrances may happen multiple times
//.........这里部分代码省略.........