当前位置: 首页 > 工具软件 > tbx > 使用案例 >

java 调用 snap-engine和s1tbx处理sentinel数据

郑衡
2023-12-01

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);
        }
    }
}

 类似资料: