最佳(Python)遥感工具介绍


发布日期 : 2023-03-29 00:34:26 UTC

访问量: 186 次浏览

据估计,目前有906颗地球观测卫星在轨道上运行, 每天为科学和工业提供数TB的数据。 这些卫星同时使用雷达和光学传感器, 以不同的光谱、空间和时间分辨率覆盖不同的光谱范围。 由于地理空间数据范围广泛, 有可能在许多工业和政府机构中已找到遥感方法的新应用。

用于遥感的最佳 Python 工具

著名的卫星系统和程序包括 ESA 的 Sentinel-1(雷达)和 Sentinel-2(光学)、 NASA 的 Landsat(光学)、 DLR 的 TerraSAR-X 和 TanDEM-X(均为雷达)以及 PlanetScope(光学)来自星球。

基本上有两种类型的地理空间数据:栅格数据和矢量数据。

栅格数据

栅格数据是由规则间隔的像素组成的网格, 其中每个像素都与一个地理位置相关联, 并表示为一个矩阵。 像素值取决于存储的信息类型, 例如数字图像的亮度值或热图像的温度值。 像素的大小也决定了光栅的空间分辨率。 因此,地理空间栅格数据用于表示卫星图像。 光栅图像通常包含多个波段或通道, 例如红色、绿色和蓝色通道。 在卫星数据中,通常也有红外线或紫外线波段。

矢量数据

矢量数据表示地球表面的地理特征, 如城市、国界、道路、水体、产权等。 这些特征由一个或多个相连的顶点表示, 其中顶点通过 x、y 和 z 值定义空间中的位置。 单个顶点是一个点, 多个相连的顶点是一条线, 多个(>3)相连且闭合的顶点称为多边形。 x、y 和 z 值始终与作为元信息存储在矢量文件中的相应坐标参考系 (CRS) 相关, 矢量数据最常见的文件格式是 GeoJSON、KML 和 SHAPEFILE。

通常需要各种工具来处理和分析这些数据, 在本文中将介绍在遥感项目中经常使用的工具。

1.请求卫星数据

EOBrowser

EOBrowser(https://apps.sentinel-hub.com/eo-browser/?zoom=10&lat=41.9&lng=12.5&themeId=DEFAULT-THEME&toTime=2021-10-26T13%3A27%3A12.447Z)是 sentinelhub 的一个网络应用程序, 可用于显示各种卫星数据, 例如 Sentinel-1、Sentinel-2、Landsat、MODIS 等。 可以通过搜索选择需要显示数据的区域栏, 通过上传 KML 或 GeoJSON 文件, 或通过绘制多边形。 “高级搜索” 按钮可用于调整某些需要优化搜索的参数, 搜索提供了下载相应原始数据以及不同可视化效果的链接。

例如,对于 Sentinel-2 数据, 可以显示 RGB 图像, 还可以显示可视化的归一化差异水指数 (NDWI) 或归一化差异植被指数 (NDVI)。

Sentinelsat

Sentinelsat 是一个 Python 软件包, 可用于从哥白尼开放访问中心请求 Sentinel 数据。 实现非常简单, 请求基于区域(例如以 GeoJSON 文件的形式)、日期、平台(例如 Sentinel-2)、产品类型(例如 L1C)、最大云覆盖等参数。 然而,sentinelsat 不提供处理下载的原始数据, 并将其转换为适当格式的工具。 这可以在 rasterio 的帮助下相对容易实现。

Sentinelhub

Python 软件包 Sentinelhub 是使用 sentinelhub 服务的 Python 接口, 这些方法和功能允许下载和处理不同支持的卫星数据(与 EOBrowser 相同)。 例如,有一些方法可以显示带有云罩的图像或最少云图像的镶嵌图案。 许多功能在 Python 和 API 文档中以易于理解的方式进行了详细描述。 Sentinelhub 还通过 OGC 服务 WMS、WMTS、WCS 和 WFS 提供卫星数据和元信息。 遗憾的是,Sentinelhub 的许多功能都不是免费提供。 根据计划,某些功能可能无法使用, 并且对数据请求有限制。

2.处理栅格数据

Rasterio

Rasterio 是一个 Python 软件包, 可用于处理地理空间栅格数据, 例如 GeoTIFF。 为此,可以使用许多模块和函数, 例如,处理来自卫星的原始数据、读取栅格数据、检索地理元数据、转换坐标、裁剪图像、合并多个图像以及以其他格式保存数据。 大量的功能和易于实施使 Rasterio 成为卫星数据分析的标准工具。

下面的代码示例展示了如何使用 Rasterio 读取 Sentinel-2 场景并将其显示并保存为 RGB 图像:

Rasterio

输出应如下所示:

Rasterio输出

Pyproj

Python 库 Pyproj 是 PROJ 的 Python 接口, PROJ 是一个将地理坐标从一个坐标参考系统 (CRS) 转换到另一个坐标参考系统的软件库。 支持大地测量变换和制图投影。 Pyproj 是一个非常简单的工具, 在遥感项目中必不可少, 可以统一可能由所用不同数据源产生的坐标参考系统。

以下示例显示了如何对上面的 Sentinel-2 图像的边界执行简单的坐标变换:

Pyproj

输出将是:

输出

SNAP

SNAP(https://step.esa.int/main/toolboxes/snap/)全称 Sentinel Application Platform, 是欧空局开发的卫星数据科学探索通用工具箱。 SNAP 为处理、建模和可视化卫星图像提供了一个直观的平台, 特别是对于哨兵任务。 该软件经过优化, 可以处理大量卫星数据。 它还有助于处理 SAR 数据, 例如来自 Sentinel-1 的数据。

SNAP 软件安装了 Sen2Cor 工具。 Sen2Cor 是一个为 Sentinel-2 图像执行大气校正的处理器, 即将 1C 级大气顶层 (TOA) 产品转换为 2A 级大气底部 (BOA) 反射率产品。 这些产品的技术规格可在此处找到:Level-1C 和 Level-2A。 同时还可以在 Python 中使用 SNAP 工具和方法。

pyroSAR

利用 Python 库 pyroSAR 可以处理合成孔径雷达 (SAR) 卫星数据, 例如 Sentinel-1、TerraSAR-X、TanDEM-X 或 ALOS-2/PALSAR-2。 访问专为 Sentinel-1 开发的 SNAP 和 GAMMA 遥感工具和功能的方法可用于此目的。

Rioxarray

xarray 是一个 Python 软件包, 它为数组提供标签, 例如维度、坐标和其他特定属性。 因此,它使用大维度阵列的工作更加直观。 Rioxarray 结合了 rasterio 的功能和 xarray 的所有优点。

Rioxarray 简化了大尺寸光栅文件的工作。 它很好地概述了光栅文件的属性, 例如边界、尺寸、坐标参考系统等。 可惜的是,这个软件包没有很好的记录, 而对于卫星数据的更复杂的操作, 仍然需要使用栅格。

3.处理矢量数据

Shapely

Shapely 是一个用于分析和操作平面地理空间特征的 Python 库。 不同的地理对象由单独的类表示, 点由 Point 类定义, 曲线由 LineString 和 LinearRing 类定义, 曲面由 Polygon 类定义。 对象集合由 MultiPoint、MultiLineString 和 MultiPolygon 类实现。 这些类是处理和操作矢量数据的标准, 也被其他软件库和 Python 包使用。

Shapely 具有多种内置方法, 可以确定对象的几何属性(例如面积、边界和长度), 还可以确定与其他对象的关系, 例如一个对象是否包含另一个对象、一个对象是否与另一个对象相交、是否一个物体接触另一个物体等等。 Shapely 本身没有读取矢量数据的功能, 为此需要其他库, 如 python-geojson、fiona 或 geopandas(见下文)。然而,将地理空间特征转换为形状物体很简单。

在下面的代码示例中,使用 GeoJSON 文件中的功能演示了上面介绍的一些标准方法:

Shapely标准方法

输出将是:

Shapely输出

Python-geojson

GeoJSON 是一种标准格式, 用于存储地理空间特征, 如点、线或多边形及其坐标。 同名的 Python 软件包提供了读取此数据、处理它并将其保存为 GeoJSON 的函数。 由于其易用性, geojson 在处理以 GeoJSON 形式提供的矢量数据时是一个非常有用的工具。 上面的代码示例演示了如何使用 geojson 包读取 GeoJSON 文件。

Geojson.io

Geojson.io https://geojson.io/#map=2/20.0/0.0 是一个地理浏览器, 允许在地图上显示地理空间特征, 可以选择来自 OpenStreetMap、Mapbox 的地图或来自 Maxar 的卫星图像。 卫星图像具有很高的空间分辨率, 但通常不是最新的。 Geojson.io 还提供了上传和显示 GeoJSON 文件以及绘制点、线和多边形的可能性。 要素可以保存为 GeoJSON、Shapefile、KML、WKT 等格式。 这使得 geojson.io 成为一个非常有用的工具, 无需任何编程知识即可创建和可视化地理矢量数据。

Geopandas

Geopandas 是 pandas 的扩展, 是用于数据分析和操作的标准库。 pandas 已知的数据类型和方法通过基于 shapely 的地理和几何对象和方法进行了扩展。 Geopandas 还具有读取和存储矢量数据的功能。

在 Geopandas 中, shapely 对象可以分组在 GeoSeries 中, 可以应用各种几何方法, 也可以利用经典操作进行数据分析和操作。 此外,Geopandas 还具有实用的地理编码工具。

Fiona

利用 Fiona 可以读取 GDAL 支持的所有光栅和矢量文件格式, 也可根据此格式保存数据。 除此之外,Fiona 还具有一些用于几何分析的基本功能, 例如确定对象的边界, 以及依赖于 shapely 和 pyproj 的坐标转换。

4.提供地理空间数据

QGIS

QGIS 是一个免费的桌面地理信息系统。 它是一种允许显示、编辑、创建、分析和发布地理信息(栅格和矢量数据)的软件解决方案。 由于 QGIS 配备了许多功能和特性, 该软件的全部潜力主要展示给经常使用它的人。 但卫星数据的显示易于实现, 对地理空间数据的探索有很大帮助。

GeoServer

GeoServer 是可用于发布地理数据的免费服务器。 它使用开放地理空间联盟标准协议网络地图服务 (WMS)、网络要素服务 (WFS)、网络覆盖服务 (WCS)、网络处理服务 (WPC) 和网络地图瓦片服务 (WMTS)。

地理空间栅格和矢量数据可以使用上述协议发布, 随后用于 Web GIS 应用程序(例如通过 Leaflet、Mapbox 或 OpenLayers)或 GIS 软件(例如 QGIS 或 ArcGIS), 这使我们能够以交互方式提供地理数据, 而无需长时间加载和大量数据传输。

Leafmap

Leafmap 是一个 Python 软件包, 用于在 Jupyter 笔记本中对地理空间数据进行交互式可视化。 只需几行代码, 就可以轻松设计交互式地图。 Leafmap 非常强大, 因为它构建并集成了各种地理空间制图和分析工具, 例如 ipyleaflet、 whiteboxtools 和 folium。

Leafmap 支持所有常见的矢量和栅格数据格式, 可从不同的基础地图中进行选择, 包括卫星地图、混合地图、街道、地形等等。 同时可以绘制自己的多边形并将它们导出为矢量文件或用于后续操作。 该软件包还提供上传功能, 地图是高度可配置的, 多边形、线条、标记、弹出窗口和图例存在许多样式选项。 如果将地理空间数据托管在图块服务器上, 例如通过 Geoserver,leafmap 可以从 WMS 或 WFS 等服务流式传输栅格和矢量数据。

5.处理气象卫星数据

Wetterdienst

Wetterdienst 是一个 Python 包, 可用于从德国气象局 (DWD) 检索气象数据。 其中包括历史天气数据、基于天气模型的预报和雷达数据(RADOLAN 和 RADVOR 等)。 简单雷达数据(如温度、大气降水等)的时间分辨率从月到年不等。 RADOLAN 数据以每分钟到每天的时间分辨率提供。 不过遗憾的是, 目前没有内置函数来创建 RADOLAN 数据的时间序列, 而这些数据通常用于分析天气数据。

Wradlib

Wradlib 是一个 Python 库, 可用于处理各种天气雷达数据, 包括 RADOLAN、DX 和 BUFR。 其应用较广的功能是天气数据可以转换为合适的栅格格式, 例如 GeoTIFF。