private Optional<CoverageCoordAxis> subsetLon(LatLonRect llbb, int stride) throws InvalidRangeException { double wantMin = LatLonPointImpl.lonNormalFrom(llbb.getLonMin(), lonAxis.getStartValue()); double wantMax = LatLonPointImpl.lonNormalFrom(llbb.getLonMax(), lonAxis.getStartValue()); double start = lonAxis.getStartValue(); double end = lonAxis.getEndValue(); // use MAMath.MinMax as a container for two values, min and max List<MAMath.MinMax> lonIntvs = subsetLonIntervals(wantMin, wantMax, start, end); if (lonIntvs.size() == 0) return Optional.empty(String.format( "longitude want [%f,%f] does not intersect lon axis [%f,%f]", wantMin, wantMax, start, end)); if (lonIntvs.size() == 1) { MAMath.MinMax lonIntv = lonIntvs.get(0); return lonAxis.subset(lonIntv.min, lonIntv.max, stride); } // this is the seam crossing case return lonAxis.subsetByIntervals(lonIntvs, stride); }
public Optional<List<CoverageCoordAxis>> subset(SubsetParams params, AtomicBoolean isConstantForcast, boolean makeCFcompliant) { List<CoverageCoordAxis> result = new ArrayList<>(); Optional<CoverageCoordAxis> axiso = runAxis.subset(params); if (!axiso.isPresent()) return Optional.empty(axiso.getErrorMessage());
opt = xAxis.subset(projbb.getMinX(), projbb.getMaxX(), horizStride); if (opt.isPresent()) xaxisSubset = (CoverageCoordAxis1D) opt.get(); else errMessages.format("xaxis: %s;%n", opt.getErrorMessage()); opt = yAxis.subset(projbb.getMinY(), projbb.getMaxY(), horizStride); if (opt.isPresent()) yaxisSubset = (CoverageCoordAxis1D) opt.get(); else errMessages.format("yaxis: %s;%n", opt.getErrorMessage()); opt = xAxis.subset(prect.getMinX(), prect.getMaxX(), horizStride); if (opt.isPresent()) xaxisSubset = (CoverageCoordAxis1D) opt.get(); else errMessages.format("xaxis: %s;%n", opt.getErrorMessage()); opt = yAxis.subset(prect.getMinY(), prect.getMaxY(), horizStride); if (opt.isPresent()) yaxisSubset = (CoverageCoordAxis1D) opt.get(); else errMessages.format("yaxis: %s;%n", opt.getErrorMessage()); else errMessages.format("lonaxis: %s;%n", opt.getErrorMessage()); opt = latAxis.subset(llbb.getLatMin(), llbb.getLatMax(), horizStride); if (opt.isPresent()) lataxisSubset = opt.get(); else errMessages.format("lataxis: %s;%n", opt.getErrorMessage());
@Override public Optional<CoverageCoordAxis> subset(SubsetParams params) { if (params == null) return Optional.of(new TimeAxis2DFmrc(new CoverageCoordAxisBuilder(this))); CalendarDate rundate = (CalendarDate) params.get(SubsetParams.runtime); boolean runtimeAll = (Boolean) params.get(SubsetParams.runtimeAll); boolean latest = (rundate == null) && !runtimeAll; // default is latest int run_index = -1; if (latest) { run_index = runCoord.getNcoords() - 1; } else if (rundate != null){ double rundateTarget = runCoord.convert(rundate); CoordAxisHelper helper = new CoordAxisHelper(runCoord); run_index = helper.findCoordElement(rundateTarget, true); // LOOK Bounded } if (run_index >= 0) { CoverageCoordAxis1D time1D = getTimeAxisForRun(run_index); return time1D.subset(params); } // no subsetting needed return Optional.of(new TimeAxis2DFmrc(new CoverageCoordAxisBuilder(this))); }