本文介绍能够简化处理和可视化空间栅格和矢量数据过程的Python包:EarthPy。EarthPy建立在Rasterio、GeoPandas和Matplotlib等成熟库之上,为地理空间数据操作提供了直观的接口。
EarthPy的主要功能
数据处理与可视化:EarthPy简化了栅格和矢量数据的加载、处理和可视化。它提供了易于使用的函数,支持数据标准化、阴影计算和空间范围计算等常见任务,这些功能对于环境科学研究尤为重要。
遥感数据分析:EarthPy允许用户查看遥感图像中单个波段的直方图和图形,以探索数据校准和质量问题。此外,它能够创建具有独特符号的底图、绘制带有颜色条的图像以及渲染多波段光谱遥感图像。
教育与教学:EarthPy被广泛应用于教育领域,特别是在教授学生如何使用开源Python工具处理地球和环境数据时。它的**
io
**模块简化了教学数据的下载过程,支持课堂上工作流程的可重复性。空间分析:支持输入/输出、掩膜处理、绘图和空间分析等功能,使得用户能够高效地执行地理空间数据操作。提供了高效的平台,使研究人员能够快速进行空间数据探索和清理。集成了GeoPandas和Rasterio的功能,使得用户能够在一个包中处理矢量和栅格数据。
EarthPy的应用领域
生态学研究人员使用EarthPy进行栖息地制图和物种分布建模。
在城市规划中,它有助于分析土地利用模式和基础设施发展。
在地球观测领域,它在处理卫星图像方面发挥着关键作用,应用于灾害管理、资源勘探和气候变化研究等领域。
EarthPy的一个重要方面是它对不同编程水平的用户都很友好。该库简单明了的语法,加上详细的文档和教程等丰富的在线资源,大大降低了初学者的入门门槛。对于高级用户来说,EarthPy提供了强大和灵活性,使其成为复杂地理空间分析的有价值工具。EarthPy为环境科学、城市规划和地球观测等领域提供了强大的数据分析工具,支持研究人员更好地理解和分析地球系统。它的简单易用的接口和丰富的功能,使得这些领域的科研人员能够更高效地处理和可视化地理空间数据。
EarthPy的使用示例
使用pip安装EarthPy:
pip install earthpy
该示例展示EarthPy进行复杂的数据分析,包括处理多波段栅格数据、对栅格数据进行计算,以及与其他地理空间Python库集成以实现高级地理空间工作流程。
import os
import matplotlib.pyplot as plt
import earthpy as et
import earthpy.plot as ep
import rioxarray
# Download sample data
data = et.data.get_data('colorado-flood')
# Set working directory to earthpy data directory
os.chdir(os.path.join(et.io.HOME, 'earth-analytics', 'data'))
# Define path to file
dem_pre_path = os.path.join("colorado-flood",
"spatial",
"boulder-leehill-rd",
"pre-flood",
"lidar",
"pre_DTM.tif")
# Read the data using rioxarray
dem_pre = rioxarray.open_rasterio(dem_pre_path, masked=True).squeeze()
# Plot DEM
fig, ax = plt.subplots(figsize=(10, 6))
ep.plot_bands(dem_pre,
cmap='terrain',
title="Lidar Digital Elevation Model (DEM) \n Boulder Flood 2013",
ax=ax)
plt.show()
该脚本显示了美国科罗拉多州博尔德地区发生洪水前的激光雷达数字高程模型(DEM)地图。
2. 可视化LandSat8波段数据
Landsat8数据集有7个波段。本文使用EarthPy包中内置的plot_bands方法绘制这些波段。plot_bands方法支持根据自定义标题进行可视化绘制。可以通过使用“title=”参数传递一个包含每个图像唯一标题的列表来实现。
import earthpy as ep
ep.data.path = "."
ep.data.get_data('colorado-flood')
im = epp.plot_bands(arr_st, cmap='RdYlGn', figsize=(12, 12))
plt.show()
输出结果如下图:
3. 绘制高光谱图像波段直方图
可视化高光谱图像数据集的波段有助于我们理解波段值的分布。本文使用earthpy.plot的hist方法绘制波段直方图,还可以修改每个直方图的列大小、标题和颜色。
import earthpy.plot as epp
data = ep.data.get_data('vignette-landsat')
landsat_path = glob("vignette-landsat/LC08_L1TP_034032_20160621_20170221_01_T1_sr_band*_crop.tif")
landsat_path.sort()
arr_st, meta = es.stack(landsat_path, nodata=-9999)
colors = ['tomato', 'navy', 'MediumSpringGreen', 'lightblue', 'orange', 'maroon', 'yellow']
epp.hist(arr_st, colors = colors, title=[f'Band-{i}' for i in range(1, 8)], cols=3, alpha=0.5, figsize = (12, 10), )
plt.show()
4. 计算和分类归一化植被指数(NDVI)
归一化植被指数(NDVI)通过测量近红外光(植被强烈反射)与红光(植被吸收)的差异来量化植被。
# Landsat 8 red band is band 4 at [3]
# Landsat 8 near-infrared band is band 5 at [4]
ndvi = es.normalized_diff(arr_st[4], arr_st[3])
titles = ["Landsat 8 - Normalized Difference Vegetation Index (NDVI)"]
epp.plot_bands(ndvi, cmap="RdYlGn", cols=1, title=titles, vmin=-1, vmax=1, figsize=(10, 10))
plt.show()
基于高光谱图像数据,NDVI的计算结果被划分为不同的类别。0以下的值将被归类为无植被。将为裸露区域和低、中、高植被区域创建其他类别。
ndvi_class_bins = [-np.inf, 0, 0.15, 0.23, 0.6, np.inf]
ndvi_landsat_class = np.digitize(ndvi, ndvi_class_bins)
# Apply the nodata mask to the newly classified NDVI data
ndvi_landsat_class = np.ma.masked_where(np.ma.getmask(ndvi), ndvi_landsat_class)
np.unique(ndvi_landsat_class)
nbr_colors = ["gray", "y", "yellowgreen", "g", "darkgreen"]
nbr_cmap = ListedColormap(nbr_colors)
# Define class names
ndvi_cat_names = [
"No Vegetation",
"Bare Area",
"Low Vegetation",
"Moderate Vegetation",
"High Vegetation",
]
# Get list of classes
classes = np.unique(ndvi_landsat_class)
classes = classes.tolist()
# The mask returns a value of none in the classes. remove that
classes = classes[0:5]
# Plot the data
fig, ax = plt.subplots(figsize=(10, 10))
im = ax.imshow(ndvi_landsat_class, cmap=nbr_cmap)
epp.draw_legend(im_ax=im, classes=classes, titles=ndvi_cat_names)
ax.set_title(
"Landsat 8 - Normalized Difference Vegetation Index (NDVI) Classes",
fontsize=14,
)
ax.set_axis_off()
# Auto adjust subplot to fit figure size
plt.tight_layout()
EarthPy在简化了使用Python进行地理空间数据分析的流程。它的易用性结合强大的数据处理和可视化能力,使其成为地理空间分析领域不可或缺的工具。随着地理空间数据的数量和种类不断增长,像EarthPy这样的工具将在地球观测和分析方面发挥关键作用。
使用文档:https://earthpy.readthedocs.io/en/latest/
代码:https://github.com/earthlab/earthpy