版权声明:本文为博主原创文章,转载请注明原文出处!
写作时间:2010年4月10日晚
欧盟的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-engine,snap-desktop,s1tbx和s2tbx这四个工程,依次进行编译(最新版本为8.0.0-SNAPSHOT)。
例如对snap-engine的编译命令如下:
1 | cd snap |
编译中主要问题是一些第三方库下载特别慢或者根本下载不下来,这时候你需要科学上网手动下载需要的依赖包,再次进行编译。
编译完这四个包以后,我们新建Maven工程进行代码测试。下面代码使用Better Java (Kotlin)进行示范,我把注释加进了代码中方便理解。
1 | package cn.demo |
代码运行过程中,提示找不到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数据,然后再进行进一步操作方便些。