前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESA SNAP工具包Java接口的使用

ESA SNAP工具包Java接口的使用

作者头像
卡尔曼和玻尔兹曼谁曼
修改2020-04-13 17:52:21
2K1
修改2020-04-13 17:52:21
举报
文章被收录于专栏:给永远比拿愉快

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

写作时间:2010年4月10日晚


ESA SNAP工具包Java接口的使用

欧盟的SNAP工具包提供了对Sentinel卫星数据的处理功能。

SANP使用Java编写,UI界面使用了NetBeans框架。

如果要进行批处理的话,还提供了基于图的Graph Processing Framework (GPF)处理模式。

此外,SNAP还贴心的提供了Python接口snappy(对Java API的封装)。

参考资料:https://senbox.atlassian.net/wiki/spaces/SNAP/overview

但是我使用官方提供的安装包安装好以后,Python接口用不了,所以我想着还不如就用原生的Java接口。

首先,从GitHub下载SNAP的源码进行编译,主要下载了snap-enginesnap-desktops1tbxs2tbx这四个工程,依次进行编译(最新版本为8.0.0-SNAPSHOT)。

例如对snap-engine的编译命令如下:

代码语言:javascript
复制
cd snap
git clone https://github.com/senbox-org/snap-engine.git
cd snap-engine
mvn clean install -DskipTests=true

编译完这四个包以后,我们新建Maven工程进行代码测试。下面代码使用Better Java (Kotlin)进行示范,我把注释加进了代码中方便理解。

代码语言:javascript
复制
package cn.demo

import java.nio.file.Paths
import org.esa.snap.core.dataio.ProductIO


fun main(args: Array<String>) {
    val path = Paths.get("S2B_MSIL1C_20200304T032629_N0209_R018_T48SYC_20200304T075000.zip")
    // 通过文件获得读取数据的Reader
    val reader = ProductIO.getProductReaderForInput(path.toFile())
    // 通过这个Reader对象来读取Sentinel数据产品Product
    val product = reader.readProductNodes(path.toFile(), null)
    // 通过这个Product对象来读取波段中存储的数据
    val band = product.getBand("B1")
    // 数据不是自动加载的,需要手动加载一下
    if (!band.hasRasterData()) {
        band.loadRasterData()
    }
    // 获取波段数据,数据是以一维数组的形式存储的,主要使用PixelInterleavedSampleModel这类进行控制像素交替方式存储
    // 有兴趣的可以参考java.awt.image.PixelInterleavedSampleModel
    val data = band.rasterData
    assert(band.rasterHeight * band.rasterWidth == data.numElems)
}

代码运行过程中,提示找不到OpenJPEG的库(Sentinel-2 SAFE格式的文件中是以JPG图像格式保存各个波段的观测数据的),最后我通过代码调试发现,SNAP中对OpenJPEG库的路径定义在~/.snap/auxdata/openjpeg/8.0.0-SNAPSHOT/目录下,而我的本地没有该目录(虽然/usr/local/bin 目录中有OpenJPEG库,但是SNAP不是在这个目录中寻找的),所以程序会报错。

解决的方案是我由于本来安装的SNAP桌面版(7.0.0),该版本在~/.snap/auxdata/openjpeg/7.0.0/目录下存放了OpenJPEG库,所以拷贝该版本的库修改名称为8.0.0-SNAPSHOT即可,程序正常运行。

总得来说,SNAP提供的参考资料不多,有问题只能取Forum中提问。所以我觉得还是使用GDAL读取Sentinel数据,然后再进行进一步操作方便些。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ESA SNAP工具包Java接口的使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档