转载自:https://blog.csdn.net/lidahuilidahui/article/details/99679554

01-SNAP与snappy介绍及安装

  • 前言
  • 关于SNAP
    • SNAP介绍
      • STEP
      • SNAP
      • Sentinel工具箱:
    • 总结
    • SNAP安装
    • 相关资源:
  • 关于snappy
    • snappy简介
    • snappy安装
      • snappy包生成
        • 方法1----在安装SNAP直接生成:
        • 方法二----利用SNAP的snappy-conf.bat脚本生成
      • snappy包解译
      • snappy包测试
  • 结语
  • 参考文献

(原创文章,转载请注明来源,谢谢!)

前言

本文为《SNAP与snappy》专栏第1篇博文。得益于欧空局(European Space Agency, ESA)的大力支持,现阶段我们能够使用到大量较好的免费遥感卫星数据(例如:Sentinel-1, Sentinel-2, Sentinel-3等 ),并且欧空局自主研发了与这些遥感数据相适应的开源遥感数据处理平台-----SNAP。SNAP开源软件阐释了“开放的世界,自由的科学”这一精神,为遥感相关学科研究人员带来了方便,使得遥感数据处理分析得以更好地开展。在SNAP官方论坛中接触到欧空局的相关专家,感受到他们扎实而渊博的知识及自由开放的精神,同时感觉到在该论坛中,我国相关科研人员关注度不够。在国内遥感领域处理软件方面多被ENVI、ERDAS、PCI、ArcGIS国外遥感公司垄断,许多高校遥感图像实践课多是讲授这些软件操作,对开源遥感处理软件SNAP、QGIS等介绍甚少,不利于摆脱对国外的依赖。创建《SNAP与snappy》专栏的目的,主要是为了推广SNAP这个开源遥感处理软件的使用与开发,学习其先进的处理技术及底层算法,以便日后更好地为国产遥感行业服务。后面的专栏内容将会使用开源软件SNAP和QGIS等开源软件介绍,少用甚至不用任何商业软件。

关于SNAP

使用过Sentinel系列数据的遥感相关学科人员都应接触过这个SNAP软件,网上也有一些文章介绍,但是无论深度还是广度,远远体现不出SNAP的优势所在,在科研圈中懂SNAP的人仍然属于少数。尽管欧空局SNAP官网等有不少关于SNAP教程资料,但是或是由于语言或是由于相关基础知识不足,造成了一定的困难。

SNAP介绍

STEP

欧空局在SEOM项目( the Scientific Exploitation of Operational Missions)支持下为地球科学观测卫星(主要是Sentinel系列卫星)开发免费的、开放源码的工具箱。欧空局将开放源码的这些工具箱放在STEP(Scientific Toolbox Exploitation Platform)这个ESA社区平台,用于科研人员访问、下载使用该平台相关软件及其文档,与开发人员进行沟通,在科学社区内进行对话,促进成果交流与改进,并为使用科学工具箱培训科学家提供教程和材料。

SNAP

以下内容大部分来自于知乎Sentinel影像专栏之《哥白尼计划的软件支持—SNAP》,该篇文章介绍得比较全(事实上,如果你看浏览过SNAP官网的话,该篇文章内容主要翻译于官网介绍),并修改并补充了部分内容。以下内容大部分来自于知乎Sentinel影像专栏之《哥白尼计划的软件支持—SNAP》,该篇文章介绍得比较全(事实上,如果你看浏览过SNAP官网的话,该篇文章内容主要翻译于官网介绍),并修改并补充了部分内容。

ESA工具箱支持ERS-ENVISAT任务、sentinel 1/2/3任务和一系列国家和第三方任务的卫星数据处理。这三个工具箱分别被称为Sentinel 1、2和3工具箱,它们共享一个称为SNAP的公共架构。

SNAP的前身来自于它们包含过去几年开发的一些历史工具箱的功能,如BEAM、NEST(Next Esa Sar Toolbox)和Orfeo Toolbox。 如果你留意过早期的一些遥感类文章的话,应该能看到这几个软件(工具箱)。

SNAP(Sentinel Application Platform)是哨兵数据应用平台,是所有哨兵工具箱的基础平台(公共架构),为桌面端C-S平台。具有可扩展性、可移植性和模块化界面。

主要特点:

SNAP中所利用到的技术:
NetBeans platform – 桌面应用程序框架;
Install4J – 多平台安装;
GeoTools – 地理空间分析工具库;
GDAL – 栅格、矢量数据的读写;
Jira –问题跟踪;
Git – 版本控制,在 GitHub进型托管

Sentinel工具箱:

  1. Sentinel-1 Toolbox (S1TBX)
  1. Sentinel-2 Toolbox (S2TBX)
  1. Sentinel-3 Toolbox (S3TBX)
  1. SMOS Toolbox
  1. Proba-V Toolbox
  1. PolSARPro:PolSARpro软件提出了大量著名的Pol-SAR算法和工具,为科学开发利用极化测量技术奠定了基础,并使用Pol-SAR、Pol-InSAR、Pol-TomoSAR和Pol-TimeSAR数据刺激研究和应用开发,接触过PolSAR研究方向的应该比较熟悉。
  2. 第三方插件

总结

实际上SNAP是所有Sentinel工具箱和SMOS工具箱的通用架构。SNAP这一架构是地球观测卫星(Earth Oberservation Mission)数据处理和分析的理想架构,它具有以下技术创新点:可扩展性、可移植性、丰富的模块化客户端平台、通用EO(Earth Oberservation)数据抽象模型、分层内存管理和图形处理框架(Graph Processing Framework, gpt)

SNAP的突出优势:

对于我们国家遥感相关研究人员来说,主要的缺点是:

总之一句话,SNAP是优秀的开源遥感处理软件,值得学习和研究。

SNAP安装

SNAP 已更新至7.0版本,还在使用旧版本的SNAP,建议升级一下。实际上SNAP V8.0已经进入开发阶段了。

SNAP用户者日大会(SNAP User Day)将于2019年9月10 日召开:届时欧空局SNAP开发专家将会出席该大会,并对SNAP的有关问题进行解答。会分享硬核干货,感兴趣的话,一定要关注。

SNAP v7.0的下载网址:http://step.esa.int/main/download/snap-download/。建议选择All Toolboxes形式的安装包,省去后面再安装部分插件的麻烦。

SNAP的安装比较简单。

博主目前使用的是Windows系统,下面简介一下Windows系统下面的关键步骤。

鼠标左键双击下载esa-snap_all_windows-x64_7_0.exe(这里是Windows系统下的.exe文件)即可。
可以选择安装的路径:

可以选择安装的工具箱,默认就行。


选择是否安装快捷方式及菜单目录,默认就行。

如果你在安装SNAP前系统已经安装了Python(V2.7, V3.3-3.4版本)版本, 博主使用的Python 3.4.4版本,如果你没有安装Python的话,可以去掉小方框中的勾,暂不配置snappy文件,安装好SNAP后再snappy也是可以的。在安装了Python的前提下,在这一步可以直接配置snappy
安装配置后可以在C:\Users\XXXXX.snap\snap-python路径(XXXXXX代表的是用户名)下找到以下文件:

后续是正常安装了,安装后在桌面上会生成SNAP的快捷方式。

打开SNAP后如图所示:

相关资源:

SNAP源码:https://github.com/senbox-org
SNAP官方论坛: https://forum.step.esa.int/
SNAP官方Wiki博客:https://senbox.atlassian.net/wiki/spaces/SNAP/overview
SNAP版本跟踪:https://senbox.atlassian.net/secure/Dashboard.jspa
SNAP Engine Java API文档:
http://step.esa.int/docs/v6.0/apidoc/engine/
SNAP Desktop Java API文档:http://step.esa.int/docs/v6.0/apidoc/desktop/

关于snappy

snappy简介

前面说到SNAP是使用Java源代码写的,必定是可以用Java编写程序进行开发的。不过,鉴于Python在目前开源世界中的数量庞大函数包和库,SNAP提供Python API接口模块snappy,以便充分利用大量Python的优质模块。

安装了snappy后,意味着你可以实现SNAP中的支持多种卫星数据(例如Sentinel-1, Sentinel-2等)处理的读写、处理、分析操作,并且可以借助Python第三方库(例如numpy, scipy,matplotlib, gdal, scikit-learn)快速实现各种自定义操作及高级算法,例如分割、面向对象分类,CNN分类等

snappy包也有两种类型,一种是Cpython(标准版Python),另一种是Jython。两种类型各有优缺点。见SNAP官方介绍:https://senbox.atlassian.net/wiki/spaces/SNAP/pages/19300362/How+to+use+the+SNAP+API+from+Python

CPython:

如果你有以上需求,请安装标准Python (CPython)的snappy。

Jython:

鉴于上述特点,毫无疑问选择CPython的snappy安装,因为我们要使用大量的第三方包(numpy, scipy, scikit-learn等),至于编写图形用户界面(GUI)有大量的第三方包(如PyQt)可以实现。

目前SNAP论坛绝大部分人安装的都是CPython类型的snappy,下面就Cpython类型的snappy的安装进行介绍(博主使用的是Win10系统)。

snappy安装

snappy的安装主要有两步:

  1. snappy包生成
  2. snappy包解译

snappy包生成

方法1----在安装SNAP直接生成:

见前面的SNAP安装教程,在SNAP安装过程直接配置,前提是你已经安装好了Python(v2.7, v3.3-3.4)。

看到这,你可能会问,能不能安装更高版本的Python(Python3.4以上版本),现在回答你这个问题,Python(v2.7, v3.3-3.4)这三个版本是欧空局推荐的版本,是经过欧空局官方测试的,最好使用这三个版本,另外,论坛也有使用Python3.5, 3.6安装成功的,但是不能保证里面是否有些代码使用是否会出错,至于更高版本Python3.7-3.8, 目前还没有人成功安装上,你可以自己试下。毫无疑问,欧空局后面会提升更高版本Python的支持,只是还需要一定的时间

博主的配置(或者说是建议吧)

不建议使用Python 2版本,这个版本在Python 官方会2020年停止维护。博主使用的两个版本的Python,分别是标准版Python 3.4.4(Python 3.4版本也已经失去支持了,但是Python3.4)以及Anaconda的Python3.6.7。使用Python 3.6,为了紧跟Python官方快速迭代更新的脚步,因为Python 3.4以下的版本有些库(例如gdal等库)已经失去支持了。另一方面,使用Python 3.4,是为了防止Python 3.6有些操作不支持。如无意外,博主后面将使用Python 3.6进行介绍。

  • 先说一下Python 3.4.4的问题:Python官网只提供了Python 3.4.5 -10版本的源码,需要自己编译(Python的源码是C语言编写的)才能安装,并且在Windows系统编译的话需要安装VS 2010(Visual Studio 2010),更高版本的VS好像编译通过不了。尽管编译不麻烦,但是VS安装包太大(安装后更是占用大量存储空间)了,我是肯定不会装的这样的庞然大物。因此,博主只好使用Python官网提供的编译好的最高版本的python 3.4.4,省去麻烦,见网址:
    https://www.python.org/downloads/release/python-344/
    点击该网址后往下拉,会看到编译好的MSI installer文件。下载后直接安装就行了。
  • 再说Python 3.6的安装:博主使用的是最新版的Anaconda,里面预装的是Python 3.7,需要建议一个Python 3.6的虚拟环境,这样的教程太多了,我不在复述了,随便粘贴一个教程:https://blog.csdn.net/Fhujinwu/article/details/85851587
  • Anaconda的spder, jupyter notebook等编辑器有时自动填充不够方便,还可以使用Pycharm作为IDE编辑器,Pycharm配置Python编译器网上有诸多教程,随便粘贴一个:https://blog.csdn.net/wingygrandam/article/details/79378286

方法二----利用SNAP的snappy-conf.bat脚本生成

在SNAP的安装路径(就是你配置安装的路径)下的snap/bin文件夹下可以看到一个snapp-conf.bat的脚本文件:

(里面还有gpt命令行工具,利用gpt可以帮助snappy更好地处理代码,往后再介绍)

注意需在snappy-conf.bat脚本所在目录调用命令行(cmd)才可以直接使用下面命令,如果不是在snappy-conf前面加上绝对路径或者你将SNAP的bin文件路径添加到环境变量中

配置的命令如下:

snappy-conf <python-exe> <snappy-dir>
  • 1

< p y t h o n − e x e > <python-exe><python−exe>为python解释器(python.exe文件)的绝对路径,注意,必须是绝对路径。
< s n a p p y − d i r > <snappy-dir><snappy−dir>为要放置生成的snappy包的目录路径,一般来说Python非标准库(第三方库)都放置在Python安装路径下Lib/dist-packages/目录下。这是一个可选参数。如果空缺的话将会生成在C:\Users\XXXXXX.snap\snap-python目录下(XXXXXX为用户名)。

Python 3.4为例:

博主的snappy-conf.bat文件所在绝对路径(见上图)为:
E:\SNAP\install_path\snap\bin\snappy-conf.bat

博主的使用的Python 3.4,python.exe文件所在的绝对路径为:
C:Python34\python.exe


要放置的snappy包的绝对路径为:
C:\Python34\Lib\site-packages

于是总的生成snappy包命令为:

E:\SNAP\install_path\snap\bin\snappy-conf.bat C:Python34\python.exe C:\Python34\Lib\site-packages
  • 1

命令很长,可以新建一个.txt文件,写好命令再复制到命令行。博主很早就配置好了,没保留截图。贴一张官方的截图,注意路径需要修改为自己的:

说下Anaconda的Python3.6:
如果是使用Anaconda虚拟环境安装Python3.6的话,在Anaconda的安装目录下会找envs这个文件夹,里面会有你装好的虚拟环境,例如楼主虚拟环境名称为py36,于是可以找到以下该目录:

进入该目录后可以找到python.exe(解释器):

该Python3.6虚拟环境的非准库也是在Lib\site-packages相对路径下:

博主配置snappy是在snappy-conf.bat所在目录使用 Windows PowerShell(Win10命令行Shell,命令有点像linux系统csh(C Shell)命令,但又不全支持,有点鸡肋,不过也是可以执行.bat脚本的)配置的,如果你在win10当前目录启动PowerShell的话非常简单,例如博主在snappy-conf.bat目录下:

鼠标移动左上方的文件菜单栏,可以看到:
鼠标左键单击一下即可打开,很方便,它的样子是这样的:
前面会提示当前路径

配置snappy的命令如下:
运行.bat脚本文件或者.exe有时需要在前面添加".",否则可能会报错。成功后如下图所示

同时可以到配置的路径下,看到下面的文件夹:

snappy包解译

还差一步,需要对应的Python解释器解译snappy包的setup.py才能让Python解释器识别其为对应的模块库(这个工作通常可以借助pip命令完成,但这里不能)。注意,必须是对应的解释器,否则,可能安装错位置。不能用pip命令安装

解译命令为:

 <python-exe> setup.py install

< p y t h o n − e x e > <python-exe><python−exe>为对应的Python解释器,最好使用绝对路径。
setup.py 位于上一步生成的的snappy目录下

移动当前路径为上一步配置好的snappy文件夹所在的路径,会看到setup.py文件(你可能看到的文件少一些,因为这是解译成功后的文件夹),你会看到jpy包(Java-python bridge, Java-Python桥),这个非常重要的包。日后,你会看到snappy许多操作都会用到它。

例如,博主使用的是Anaconda虚拟环境Python3.6,对应的解释器python.exe,所在完整路径为:E:\Anaconda\Anaconda3\envs\py36\python.exe。
因此,解译命令为:

E:\Anaconda\Anaconda3\envs\py36\python.exe setup.py install

成功解译后如下图所示

snappy包测试

为了检查snappy是否安装成功可以用简单的小代码测试一下。
在生成的snappy下有一个testdata文件夹,会看到.dim格式的测试数据文件


博主在Python 3.6环境下写的简单测试程序(注意,file_path为测试数据所在目录的完整绝对路径,当然你也可以使用Sentinel-1, Sentinel-2数据做测试):

from snappy import ProductIO
file_path = r'E:\Anaconda\Anaconda3\envs\py36\Lib\sitepackages\snappy\testdata\MER_FRS_L1B_SUBSET.dim'
p = ProductIO.readProduct(file_path)
list(p.getBandNames())
# print(list(p.getBandNames()))

成功后的结果如下图所示:


如果你执行上述程序,没有报错,恭喜你成功安装上snappy。
关于snappy的入门级教程请看:
https://github.com/techforspace/sentinel

结语

SNAP与snappy的介绍、安装该收尾了,然而,SNAP的探索和开发之路才刚刚有了起点,漫漫长路伴你闯!还是提一句,如果你对SNAP或者snappy感兴趣的话,可以加入博主创建的欧空局SNAP处理交流群:665903216(这个群已满人),欧空SNAP处理交流群(二):1102493346

参考文献

[1] STEP官网:http://step.esa.int/main/
[2] 知乎Sentinel影像专栏之《哥白尼计划的软件支持—SNAP》:https://zhuanlan.zhihu.com/p/61230869
[3] SNAP Wiki博客:https://senbox.atlassian.net/wiki/spaces/SNAP/pages/24051781/Using+SNAP+in+your+programs
[4] techforsapce官网:https://www.techforspace.com/

01-SNAP与snappy介绍及安装相关推荐

  1. 【opencv系列01】OpenCV4.X介绍与安装

    点击上方"AI搞事情"关注我们 一.介绍 OpenCV(开源计算机视觉库:http://opencv.org)是英特尔开源的一个跨平台计算机视觉的BSD许可库,包含数百种计算机视觉 ...

  2. LNMP基础架构介绍与安装

    1.LNMP架构介绍 LNMP==Linux+Nginx+Mysql+PHP  nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量.  nginx和LAMP不 ...

  3. Azkaban的介绍、安装与使用

    转载:https://blog.csdn.net/Sven119/article/details/90144843 目录 1.概述 1.1.为什么需要工作流调度器 1.2.工作流调度实现方式 1.3. ...

  4. Snappy压缩库安装和使用之一

     近日需要在毕业设计中引入一个压缩库,要求压缩与解压缩速度快,但是压缩率可以不那么苛刻.查找资料发现Google的snappy库比较合适,而且该库开源,由C++写成.所以就拿来使用一下,下面权作记 ...

  5. 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】

    视频地址:[尚硅谷]大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01[Zookeeper(入门.本地安装.集群操作)] ...

  6. scom2012 监控linux,System center 2012 R2 实战六、SCOM2012R2介绍及安装

    ~~ 诸位,周末好,答应了要写SCOM2012R2,结果这几天一直没写,因为项目那面确实每天都很忙.这会周末,总算是可以轻松下来了,于是我决定今天多写几篇博客.==================== ...

  7. hadoopsnappy解压_Hadoop Snappy 压缩的安装和配置

    snappy是google的一个开源的压缩库,在合理的压缩率的前提下提供了提供了一个很高的压缩/解压的速度,利用单颗Intel Corei7处理器内核处理达到每秒处理250MB~500MB的数据流.s ...

  8. Oralce介绍与安装

    title: Oralce介绍与安装 date: 2020-01-01 15:01:56 categories: Oracle tags: 基础概念 数据库系统 数据库(DB) 数据存放的仓库 数据库 ...

  9. Scrapy-Splash的介绍、安装以及实例

    scrapy-splash的介绍   在前面的博客中,我们已经见识到了Scrapy的强大之处.但是,Scrapy也有其不足之处,即Scrapy没有JS engine, 因此它无法爬取JavaScrip ...

最新文章

  1. phonegap 2.7 ios配置安装详细教程(2.9通用)
  2. 定义__asm块作为C宏
  3. SQL Server 2005 数据库邮件 使用要点
  4. OpenJDK install
  5. 上币至iamToken
  6. spring-boot注解详解(五)
  7. 机器学习之超参数调优——超参数调优的方法
  8. JAVA入门级教学之(连接运算符)
  9. Mybatis MySQL批量更新
  10. C语言之“#“和“##“用法(十四)
  11. oracle 偶尔登录超时,OracleClient,间歇性连接问题:应用程序挂起在OracleConnection.Open()上,没有超时,没有引发异常...
  12. 20200708每日一句
  13. Java初级程序员面试中应该如何准备?一般公司对Java开发的要求有哪些?
  14. linux 实时查看cpu温度
  15. 大白话C++:新手入门教程(附源码及详解、视频课程资料推荐)
  16. 计算机无法上无线网络连接到internet,电脑连接不上无线网络,教您怎么解决电脑连接不上无线网络...
  17. Web应用跨域访问解决方案
  18. NBA 大量球迷敏感信息被泄露
  19. 【清新的田园女孩杨璐绮☆U☆桌面壁纸】
  20. python图案绘制解锁_PythonAppium实现安卓手机图形解锁案例

热门文章

  1. 蓝牙BLE芯片PHY6222之烧录以及调试
  2. mysql workbench 报 tables could not be fetched.
  3. python做excel数据分析带gui_Python进阶量化交易专栏场外篇25-GUI工具实现excel功能...
  4. python列表题目_Python列表练习题
  5. win7防火墙开启ping
  6. jar包打补丁 jar -uf_Java加密jar包流程
  7. 6-6 Isleap (5 分)
  8. 戴尔硬件服务器参数,戴尔_PowerEdge R540_机架式服务器参数_服务器推荐购买 | Dell 中国大陆...
  9. 怎么查看浪潮服务器型号,供应 浪潮服务器 各种型号
  10. 快速查询出中通快运物流信息,将信息导出EXCEL表格