相关文章推荐
飞奔的丝瓜  ·  关于解决 错误: ...·  1 月前    · 
英俊的汤圆  ·  【记BUG】Aspose.cell ...·  5 月前    · 
腼腆的绿豆  ·  Python流行的IDE,框架,库等相关排行 ...·  1 年前    · 
含蓄的火锅  ·  快速使用VB.NET搜索程序实例-100个v ...·  1 年前    · 
博学的板凳  ·  异常处理和UDP Socket套接字 - ...·  1 年前    · 
Code  ›  SNAP Java API处理Sentinel-1数据开发者社区
https://cloud.tencent.com/developer/article/1672523
精明的大白菜
10 月前
卡尔曼和玻尔兹曼谁曼

SNAP Java API处理Sentinel-1数据

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
卡尔曼和玻尔兹曼谁曼
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > SNAP Java API处理Sentinel-1数据

SNAP Java API处理Sentinel-1数据

作者头像
卡尔曼和玻尔兹曼谁曼
发布 于 2020-08-02 17:54:54
807 0
发布 于 2020-08-02 17:54:54
举报
文章被收录于专栏: 给永远比拿愉快 给永远比拿愉快

版权声明:本文为博主原创文章,转载请注明原文出处!

作者:阿振

写作时间:2020年4月14日 周二


使用SNAP JAVA API处理Sentinel-1数据

SNAP软件使用Java语言开发,提供了Python接口snappy,官方教程中也多以Python接口进行示范。但是我在使用Python接口过程中,发现并不是很好用,你必须要同时懂Java语言才能很好地使用Python接口,在IDEA中使用Python接口的代码基本上没有提示,报错了也是Java的错误提示。而且,Java本来是运行在虚拟机上的语言,效率不高,再用Python包一层,更加降低了运行效率。

所以,对于我来说,SNAP的Python接口就是鸡肋,没有使用的必要。直接使用Java接口,方便程序直接进行调试,有问题可以直接去看源代码,解决了官方资料不足的问题。

SNAP GPF的使用范式

SNAP推荐使用GPF(Graph Processing Framework)进行数据处理。GPF的使用也很简单,首先基于Operation创建Product,然后写入Product。在写入过程中会自动执行Operation完成你想要的数据处理流程,处理的算法是封装在Operation中的。

使用GPF的好处是你可以进行多个Operation的流程处理,前一个处理结果直接进入后一个处理,不需要写入磁盘,可以减少磁盘IO带来的时间消耗。

对Sentinel-1 GRD数据的处理案例

下面以对Sentinel-1 GRD数据进行一系列预处理流程演示SNAP Java接口的使用。

预处理的流程包括:首先对GRD各个极化波进行段辐射校正输出后向散射系数(Sigma nought),然后进行数据裁剪,最后进行地形校正的。

下面是使用Better Java (Kotlin)进行entinel-1 GRD数据处理的源码。其中, GPF.createProduct 方法需要传入Operation的名称和参数,这些信息都可以通过查看Java源代码的方式找到。

代码运行过程中需要下载DEM数据,可能会比较耗时。如果不对数据裁剪,由于原始数据太大,可能会造成内存溢出。我的笔记本根本跑不动。

代码语言: javascript
复制
package cn.demo
import java.nio.file.Paths
import org.apache.commons.io.FilenameUtils
import kotlin.collections.HashMap
import org.esa.snap.core.dataio.ProductIO
import org.esa.snap.core.gpf.GPF
import com.bc.ceres.core.PrintWriterConciseProgressMonitor
import org.locationtech.jts.io.WKTReader
fun main() {
    val srcPath =
    Paths.get("/Users/Demo/Desktop/S1A_IW_GRDH_1SDV_20200301T104455_20200301T104520_031481_03A00B_0A9F.zip")
    val srcProduct = ProductIO.readProduct(srcPath.toFile())
    val outDir = "/Users/Demo/Desktop"
    val baseName = FilenameUtils.getBaseName(srcPath.toString())
    GPF.getDefaultInstance().operatorSpiRegistry.loadOperatorSpis()
    for (polar in arrayOf("VV", "VH")) {
        // 首先进行辐射校正(CALIBRATION)
        // 对应是的org.esa.s1tbx.calibration.gpf.CalibrationOp类
        var parameters = HashMap<String, Any>()
        parameters["outputSigmaBand"] = true
        parameters["selectedPolarisations"] = polar
        val caliProduct = GPF.createProduct("Calibration", parameters, srcProduct)
        // 然后进行裁剪,如果不裁剪,图像太大,容易OutOfMemory
        // 对应的是org.esa.snap.core.gpf.common.SubsetOp类
        val wktRect = "POLYGON((108.175 33.873,108.782 33.873,108.782 33.129,108.175 33.129,108.175 33.873))"
        parameters["geoRegion"] = WKTReader().read(wktRect)
        parameters["bandNames"] = "Sigma0_${polar}"
        val subsetProduct = GPF.createProduct("Subset", parameters, caliProduct)
        // 然后进行地形校正(TERRAIN CORRECTION)
        // 对应的是org.esa.s1tbx.sar.gpf.geometric.RangeDopplerGeocodingOp
        val corrPath = "${outDir}/${baseName}_Corrected_${polar}"
        parameters.clear()
        parameters["pixelSpacingInMeter"] = 10.0
        parameters["sourceBands"] = "Sigma0_${polar}"
        val corrProduct = GPF.createProduct("Terrain-Correction", parameters, subsetProduct)
        ProductIO.writeProduct(
            corrProduct, corrPath, "GeoTIFF",
            PrintWriterConciseProgressMonitor(System.out)
      	// 最后进行对象销毁,释放内存空间
 
推荐文章
飞奔的丝瓜  ·  关于解决 错误: 找不到或无法加载主类_找不到类文件 csdn-CSDN博客
1 月前
英俊的汤圆  ·  【记BUG】Aspose.cell Excel转Pdf抛出CellsException_c# aspose.cells excel转pdf 带图片异常-CSDN博客
5 月前
腼腆的绿豆  ·  Python流行的IDE,框架,库等相关排行榜 - 腾讯云开发者社区-腾讯云
1 年前
含蓄的火锅  ·  快速使用VB.NET搜索程序实例-100个vb精彩小程序源码实例
1 年前
博学的板凳  ·  异常处理和UDP Socket套接字 - 只会玩辅助 - 博客园
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号