java 调用 snap-engine和s1tbx处理sentinel数据
pom文件
<dependencies>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>ceres-core</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>ceres-jai</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>ceres-glayer</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>snap-core</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>snap-gpf</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>snap-geotiff</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>snap-engine-utilities</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>snap-envi-reader</artifactId>
</dependency>
<dependency>
<groupId>org.esa.snap</groupId>
<artifactId>snap-netcdf</artifactId>
</dependency>
<dependency>
<groupId>org.esa.s1tbx</groupId>
<artifactId>s1tbx-commons</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
</dependency>
<dependency>
<groupId>uk.me.jstott</groupId>
<artifactId>jcoord</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.jlinda</groupId>
<artifactId>jlinda-core</artifactId>
</dependency>
</dependencies>
java 代码
import com.bc.ceres.core.PrintWriterConciseProgressMonitor;
import org.esa.snap.core.dataio.ProductIO;
import org.esa.snap.core.dataio.ProductIOPlugInManager;
import org.esa.snap.core.datamodel.Product;
import org.esa.snap.core.gpf.GPF;
import org.esa.snap.core.gpf.OperatorSpi;
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author: taizhimin
* @date: 2021/6/4 8:58
* @email 354197949@qq.com
*/
public class TestSnap {
public static void main(String[] args) throws IOException {
String baseDir = "D:\\sentinel";
GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis();
//打印支持的插件列表
//showSupportPlugins();
final Path dir = Paths.get(baseDir);
try (final DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.zip")) {
stream.forEach(path -> {
try {
processSentinel1(path, path.getParent().toString() + "/out/" + path.getFileName().toString().split("\\.")[0] + ".dim");
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
public static void processSentinel1(Path srcPath, String target) throws IOException {
System.out.println("正在处理:" + srcPath);
final Product product = ProductIO.readProduct(srcPath.toFile());
final Product productApplyOrbitFile = GPF.createProduct("Apply-Orbit-File", new HashMap<>(), product);
final Map<String, Object> parm = new HashMap<>(2);
parm.put("outputImageInComplex", true);
final Product productCalibration = GPF.createProduct("Calibration", parm, productApplyOrbitFile);
final Product productDeburst = GPF.createProduct("TOPSAR-Deburst", new HashMap<>(), productCalibration);
final Map<String, Object> objectObjectHashMap = new HashMap<>(2);
objectObjectHashMap.put("matrix", "C2");
final Product productPolarimetricMatrixGeneration = GPF.createProduct("Polarimetric-Matrices", objectObjectHashMap, productDeburst);
final Product productMultilooking = GPF.createProduct("Multilook", new HashMap<>(), productPolarimetricMatrixGeneration);
final Product productTC = GPF.createProduct("Terrain-Correction", new HashMap<>(), productMultilooking);
GPF.writeProduct(productTC, new File(target), "BEAM-DIMAP", true, new PrintWriterConciseProgressMonitor(System.out));
//GPF.writeProduct(productTC, new File(target), "GeoTIFF-BigTIFF", true, new PrintWriterConciseProgressMonitor(System.out));
productApplyOrbitFile.dispose();
productCalibration.dispose();
productDeburst.dispose();
productPolarimetricMatrixGeneration.dispose();
productMultilooking.dispose();
productTC.dispose();
product.dispose();
System.out.println("处理完成:" + srcPath);
}
public void showSupportPlugins() {
final Set<OperatorSpi> operatorSpis = GPF.getDefaultInstance().getOperatorSpiRegistry().getOperatorSpis();
operatorSpis.forEach(item -> System.out.println(item.getOperatorAlias()));
ProductIOPlugInManager registry = ProductIOPlugInManager.getInstance();
final String[] allProductReaderFormatStrings = registry.getAllProductReaderFormatStrings();
for (String allProductReaderFormatString : allProductReaderFormatStrings) {
System.out.println(allProductReaderFormatString);
}
}
}