Esempio n. 1
0
 private void readCalibrationCoefficients(int rawY, int[] calibCoeff) throws IOException {
   CompoundData dataRecord = noaaFile.getDataRecord(rawY);
   SequenceData calibration_coefficients = dataRecord.getSequence("CALIBRATION_COEFFICIENTS");
   for (int i = 0; i < calibCoeff.length; i++) {
     calibCoeff[i] = calibration_coefficients.getInt(i);
   }
 }
Esempio n. 2
0
 private boolean hasData(int rawY) throws IOException {
   if (channel != AvhrrConstants.CH_3A && channel != AvhrrConstants.CH_3B) {
     return true;
   }
   final int bitField = noaaFile.getScanlineBitfield(rawY);
   final int channel3ab = bitField & 3;
   return (channel3ab == 1 && channel == AvhrrConstants.CH_3A)
       || (channel3ab == 0 && channel == AvhrrConstants.CH_3B);
 }
Esempio n. 3
0
  @Override
  public synchronized void readBandRasterData(
      int sourceOffsetX,
      int sourceOffsetY,
      int sourceWidth,
      int sourceHeight,
      int sourceStepX,
      int sourceStepY,
      ProductData destBuffer,
      ProgressMonitor pm)
      throws IOException {

    AvhrrFile.RawCoordinates rawCoord =
        noaaFile.getRawCoordinates(sourceOffsetX, sourceOffsetY, sourceWidth, sourceHeight);

    final float[] targetData = (float[]) destBuffer.getElems();

    int targetIdx = rawCoord.targetStart;
    pm.beginTask("Reading AVHRR band '" + getBandName() + "'...", rawCoord.maxY - rawCoord.minY);
    try {
      for (int rawY = rawCoord.minY; rawY <= rawCoord.maxY; rawY += sourceStepY) {
        if (pm.isCanceled()) {
          break;
        }

        boolean validData = hasData(rawY);
        if (validData) {
          if (calibrator.requiresCalibrationData()) {
            readCalibrationCoefficients(rawY, calibrationData);
            validData = calibrator.processCalibrationData(calibrationData);
          }
          if (validData) {
            readData(rawY);
            validData = containsValidCounts();
            if (validData) {
              for (int sourceX = rawCoord.minX; sourceX <= rawCoord.maxX; sourceX += sourceStepX) {
                targetData[targetIdx] = calibrator.calibrate(lineOfCounts[sourceX]);
                targetIdx += rawCoord.targetIncrement;
              }
            }
          }
        }
        if (!validData) {
          for (int sourceX = rawCoord.minX; sourceX <= rawCoord.maxX; sourceX += sourceStepX) {
            targetData[targetIdx] = AvhrrConstants.NO_DATA_VALUE;
            targetIdx += rawCoord.targetIncrement;
          }
        }
        pm.worked(1);
      }
    } finally {
      pm.done();
    }
  }