ESA SNAP工具包Java接口的使用
版权声明:本文为博主原创文章,转载请注明原文出处!
写作时间: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-engine,snap-desktop,s1tbx和s2tbx这四个工程,依次进行编译(最新版本为8.0.0-SNAPSHOT)。
例如对snap-engine的编译命令如下:
cd snap
git clone https://github.com/senbox-org/snap-engine.git
cd snap-engine
mvn clean install -DskipTests=true
编译中主要问题是一些第三方库下载特别慢或者根本下载不下来,这时候你需要科学上网手动下载需要的依赖包,再次进行编译。
编译完这四个包以后,我们新建Maven工程进行代码测试。下面代码使用Better Java (Kotlin)进行示范,我把注释加进了代码中方便理解。
package cn.demoimport java.nio.file.Paths
import org.esa.snap.core.dataio.ProductIOfun main(args: Array<String>) {val path = Paths.get("S2B_MSIL1C_20200304T032629_N0209_R018_T48SYC_20200304T075000.zip")// 通过文件获得读取数据的Readerval reader = ProductIO.getProductReaderForInput(path.toFile())// 通过这个Reader对象来读取Sentinel数据产品Productval product = reader.readProductNodes(path.toFile(), null)// 通过这个Product对象来读取波段中存储的数据val band = product.getBand("B1")// 数据不是自动加载的,需要手动加载一下if (!band.hasRasterData()) {band.loadRasterData()}// 获取波段数据,数据是以一维数组的形式存储的,主要使用PixelInterleavedSampleModel这类进行控制像素交替方式存储// 有兴趣的可以参考java.awt.image.PixelInterleavedSampleModelval data = band.rasterDataassert(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数据,然后再进行进一步操作方便些。
ESA SNAP工具包Java接口的使用相关推荐
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
- Java并发编程-并发工具包java.util.concurrent使用指南
译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新 本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurren ...
- 在php中调用java接口吗,php 调用 java 接口
php 需要开启 curl模块 /* * HTTP 请求函数封装 */ function http_request_cloudzone($url, $data){ //var_dump($url.&q ...
- Java接口自动化之Maven工具使用
VOL 190 30 2020-12 今天距2021年1天 这是ITester软件测试小栈第190次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 08 ...
- Java接口和包(超详细)
目录 前言 接口 声明接口 接口的实现 接口的继承 实现多个接口时的常量和方法冲突问题 包 包的创建 导入包 Java的系统包 常用工具包 java.lang包 java.util包 最后 前言 什么 ...
- Java接口对Hadoop集群的操作
Java接口对Hadoop集群的操作 首先要有一个配置好的Hadoop集群 这里是我在SSM框架搭建的项目的测试类中实现的 一.windows下配置环境变量 下载文件并解压到C盘或者其他目录. 链接: ...
- 推荐一个 Java 接口快速开发框架
欢迎关注方志朋的博客,回复"666"获面试宝典 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框 ...
- java接口如何定义常量 c_在Java接口中怎样访问定义的常量呢?
java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).那么我们在Java接口中怎 ...
- Java接口和Java抽象类
Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...
最新文章
- azure多功能成像好用吗_如何使用Azure功能处理高吞吐量消息
- shiroConfig配置中要注意的事项
- Android BitmapShader 实战 实现圆形、圆角图片
- C语言求一个数的平方根倒数的近似值-一战封神的代码
- java sql update用法_使用if else条件将SQL UPDATE语句转换为php(codeigniter)
- Beego框架简介准备搭建分布式爬虫
- React Router最新指南与异步加载实践
- Linux环境下编译运行大型C语言项目
- laravel 框架使用hdjs 实现多图上传功能
- 一线二线城市工作的区别
- 腾讯云服务器被攻击我是这样应对的
- stm32f103c8t6串口数据包收发
- 李奇霖:通道业务山穷水尽 券商资管何去何从?
- 太原市住房公积金商转公又新增一种担保方式
- C# MVC《捷信达酒店管理系统》项目研发技术总结文献
- XGBOOST原理解析
- RedHat 6.4配置本地镜像源(适用于已停止更新的Linux系统)
- sticky INTENT
- 手机酷狗2 java_酷狗叮咚(原手机酷狗) 2.70 For Java 中文官方安装版下载
- 几个国外域名解析网站
热门文章
- windows找不到文件,如何解决。
- Windows7操作系统要求电脑配置
- 台式电脑:点击开启虚拟机报错:此主机支持intel vy-x, 但intel vy-x处于禁用状态
- 转一篇十几年前的旧文,与各位共赏之
- 视频质量诊断视频质量分析
- 游戏怎么关闭英伟达NVIDIA Corporation提示
- 评估数据,包括长度,角度,卷曲度
- 墨迹天气php,Android_仿墨迹天气在Android App中实现自定义zip皮肤更换,在这里谈一下墨迹天气的换肤 - phpStudy...
- win10+中标麒麟双系统安装步骤
- 协和医院(东单院区)就诊流程记录