private void traceContour(
      float[][] grid,
      int[] cell,
      double level,
      double west,
      double north,
      double cellSize,
      GeoSet levelGeoSet) {

    GeoPath geoPath = traceContour(grid, cell, level, west, north, cellSize);
    if (geoPath != null && geoPath.getPointsCount() > 1) {
      levelGeoSet.add(geoPath);
    }
  }
  public GeoObject operate(GeoGrid geoGrid, double firstContourLevel, double lastContourLevel) {
    flags = new boolean[geoGrid.getRows()][geoGrid.getCols()];

    GeoSet geoSet = new GeoSet();

    final int nlevels = (int) ((lastContourLevel - firstContourLevel) / interval) + 1;
    if (treatDegreeJump) {
      GeoSet levelGeoSet = new GeoSet();
      this.contourLevel(geoGrid, 0.f, levelGeoSet);
      levelGeoSet.setName(Float.toString(0.f));
      geoSet.add(levelGeoSet);
    }

    for (int i = 0; i < nlevels; ++i) {
      final double contourLevel = firstContourLevel + i * interval;
      GeoSet levelGeoSet = new GeoSet();
      this.contourLevel(geoGrid, contourLevel, levelGeoSet);
      levelGeoSet.setName(Double.toString(contourLevel));
      geoSet.add(levelGeoSet);
    }
    return geoSet;
  }