ESA SNAP工具包Java接口的使用

网友投稿 315 2022-09-18

ESA SNAP工具包Java接口的使用

作者:阿振

ESA SNAP工具包Java接口的使用

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

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

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

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

参考资料:snapgit clone snap-enginemvn clean install -DskipTests=true

编译中主要问题是一些第三方库下载特别慢或者根本下载不下来,这时候你需要科学上网手动下载需要的依赖包,再次进行编译。

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

package cn.demoimport java.nio.file.Pathsimport org.esa.snap.core.dataio.ProductIOfun main(args: Array) { 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数据,然后再进行进一步操作方便些。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通告栏-文字上下轮播 | uniapp实现
下一篇:矢量数据空间查询
相关文章

 发表评论

暂时没有评论,来抢沙发吧~