예제 #1
0
  private boolean getPosition(
      final double lat,
      final double lon,
      final double alt,
      final int x0,
      final int y0,
      final int w,
      final int h,
      final PositionData data) {

    GeoUtils.geo2xyzWGS84(lat, lon, alt, data.earthPoint);

    /*final double zeroDopplerTime = SARGeocoding.getEarthPointZeroDopplerTimeNewton(
    firstLineUTC, lineTimeInterval, wavelength, data.earthPoint,
    orbit.sensorPosition, orbit.sensorVelocity);*/

    final double zeroDopplerTime =
        SARGeocoding.getEarthPointZeroDopplerTimeNewton(
            firstLineUTC, lineTimeInterval, wavelength, data.earthPoint, orbit);

    if (zeroDopplerTime == SARGeocoding.NonValidZeroDopplerTime) {
      return false;
    }

    data.slantRange =
        SARGeocoding.computeSlantRange(zeroDopplerTime, orbit, data.earthPoint, data.sensorPos);

    final double zeroDopplerTimeWithoutBias =
        zeroDopplerTime + data.slantRange / Constants.lightSpeedInMetersPerDay;

    data.azimuthIndex = (zeroDopplerTimeWithoutBias - firstLineUTC) / lineTimeInterval;

    if (!(data.azimuthIndex > y0 - 1 && data.azimuthIndex <= y0 + h)) {
      return false;
    }

    data.slantRange =
        SARGeocoding.computeSlantRange(
            zeroDopplerTimeWithoutBias, orbit, data.earthPoint, data.sensorPos);

    if (!srgrFlag) {
      data.rangeIndex = (data.slantRange - nearEdgeSlantRange) / rangeSpacing;
    } else {
      data.rangeIndex =
          SARGeocoding.computeRangeIndex(
              srgrFlag,
              sourceImageWidth,
              firstLineUTC,
              lastLineUTC,
              rangeSpacing,
              zeroDopplerTimeWithoutBias,
              data.slantRange,
              nearEdgeSlantRange,
              srgrConvParams);
    }

    if (data.rangeIndex <= 0.0) {
      return false;
    }

    if (!nearRangeOnLeft) {
      data.rangeIndex = sourceImageWidth - 1 - data.rangeIndex;
    }

    if (!(data.rangeIndex >= x0 && data.rangeIndex < x0 + w)) {
      return false;
    }
    return true;
  }