地理空间技术是指使用地理信息系统(GIS)、遥感、全球定位系统(GPS)和其他地理空间数据和工具来捕捉、分析和可视化有关地球表面物理特征和特性的信息。地理空间技术的出现彻底改变了我们分析和解读地球表面的方式。另一方面,在地理空间数据日益丰富的背景下,开发高效且用户友好的数据分析工具的需求变得至关重要。

本文介绍能够简化处理和可视化空间栅格和矢量数据过程的Python包:EarthPy。EarthPy建立在Rasterio、GeoPandas和Matplotlib等成熟库之上,为地理空间数据操作提供了直观的接口。
EarthPy的主要功能
-
数据处理与可视化:EarthPy简化了栅格和矢量数据的加载、处理和可视化。它提供了易于使用的函数,支持数据标准化、阴影计算和空间范围计算等常见任务,这些功能对于环境科学研究尤为重要。
-
遥感数据分析:EarthPy允许用户查看遥感图像中单个波段的直方图和图形,以探索数据校准和质量问题。此外,它能够创建具有独特符号的底图、绘制带有颜色条的图像以及渲染多波段光谱遥感图像。
-
教育与教学:EarthPy被广泛应用于教育领域,特别是在教授学生如何使用开源Python工具处理地球和环境数据时。它的**
io**模块简化了教学数据的下载过程,支持课堂上工作流程的可重复性。 -
空间分析:支持输入/输出、掩膜处理、绘图和空间分析等功能,使得用户能够高效地执行地理空间数据操作。提供了高效的平台,使研究人员能够快速进行空间数据探索和清理。集成了GeoPandas和Rasterio的功能,使得用户能够在一个包中处理矢量和栅格数据。

EarthPy的应用领域
EarthPy在环境科学、城市规划和地球观测等领域有广泛的应用。例如:
- 生态学研究人员使用EarthPy进行栖息地制图和物种分布建模。
- 在城市规划中,它有助于分析土地利用模式和基础设施发展。
- 在地球观测领域,它在处理卫星图像方面发挥着关键作用,应用于灾害管理、资源勘探和气候变化研究等领域。
EarthPy的一个重要方面是它对不同编程水平的用户都很友好。该库简单明了的语法,加上详细的文档和教程等丰富的在线资源,大大降低了初学者的入门门槛。对于高级用户来说,EarthPy提供了强大和灵活性,使其成为复杂地理空间分析的有价值工具。EarthPy为环境科学、城市规划和地球观测等领域提供了强大的数据分析工具,支持研究人员更好地理解和分析地球系统。它的简单易用的接口和丰富的功能,使得这些领域的科研人员能够更高效地处理和可视化地理空间数据。

EarthPy的使用示例
EarthPy能够与数据科学工具如Pandas、NumPy和Scikit-learn无缝集成,这意味着用户可以将地理空间数据纳入更广泛的数据分析工作流程中。这种互操作性对于需要结合空间和非空间数据分析的多学科项目至关重要。
使用pip安装EarthPy:
pip install earthpy1. 加载和可视化DEM数据
该示例展示EarthPy进行复杂的数据分析,包括处理多波段栅格数据、对栅格数据进行计算,以及与其他地理空间Python库集成以实现高级地理空间工作流程。
import osimport matplotlib.pyplot as pltimport earthpy as etimport earthpy.plot as epimport rioxarray# Download sample datadata = et.data.get_data('colorado-flood')# Set working directory to earthpy data directoryos.chdir(os.path.join(et.io.HOME, 'earth-analytics', 'data'))# Define path to filedem_pre_path = os.path.join("colorado-flood", "spatial", "boulder-leehill-rd", "pre-flood", "lidar", "pre_DTM.tif")# Read the data using rioxarraydem_pre = rioxarray.open_rasterio(dem_pre_path, masked=True).squeeze()# Plot DEMfig, 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 epep.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 eppdata = 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()# Stacking Bandsarr_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 datandvi_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 namesndvi_cat_names = [ "No Vegetation", "Bare Area", "Low Vegetation", "Moderate Vegetation", "High Vegetation",]# Get list of classesclasses = np.unique(ndvi_landsat_class)classes = classes.tolist()# The mask returns a value of none in the classes. remove thatclasses = classes[0:5]# Plot the datafig, 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 sizeplt.tight_layout()
EarthPy在简化了使用Python进行地理空间数据分析的流程。它的易用性结合强大的数据处理和可视化能力,使其成为地理空间分析领域不可或缺的工具。随着地理空间数据的数量和种类不断增长,像EarthPy这样的工具将在地球观测和分析方面发挥关键作用。
本公众号相关内容推荐
- 地理空间深度学习python库:TorchGeo
- 遥感数据分析python库scikit-eo
- 图网络的应用场景及图分析python库
- 使用Python和NetworkX创建并可视化图网络(Graph Network)
- OpenResearcher:一个开源科学研究AI助理
- NeuralGCM: 一种融合机器学习与物理原理来模拟地球大气的新方法
- Transformer Explainer:文本生成模型交互式可视化工具
- 用于探索性数据分析(EDA)的开源python库
- 分享一个构建交互式D3js可视化的Python库
- 推荐15个图网络可视化python软件包
- 9个提升科研效率的软件工具
- 生成式人工智能模型颠覆传统天气预报
- 分享5个python可视化图表工具
- 分享17个网络(Network)数据可视化工具
- Napari:一个支持分析大型多维图像数据集的python工具
- 地理空间数据分析可视化R软件包汇总
- 大气海洋科学数据可视化案例集#2
- 一个快速检索和下载NASA地球科学数据的Python软件包
- 可视化呈现海洋洋流-墨西哥湾流
- 探索NOAA提供的数据产品资源
- 全球海洋船舶定位数据交互式可视化(附数据)
- 地球科学领域开源python包#1
- 地球科学领域开源python包#2
- 大规模空间矢量数据可视化Python库-lonboard
- 可视化呈现2023年是有气象记录以来最热的一年
- 大气海洋科学数据可视化案例集#1
- 地球科学领域计算分析开源Julia软件包
- 地球观测数据可视化工具
- 地球科学领域计算分析开源Julia软件包