清华主页 - 清华新闻 - 综合时讯 - 正文

Python如何直接从DEM模型(TIF格式文件)中提取每个像素点的经纬度坐标和相应的高程信息?

地理信息系统(GIS)领域,#xff08数字高程模型;Digital Elevation Model, DEM)是一个非常重要的数据源,它用来描述表面的三维形状。DEM通常以格栅格式存储,GeoTIF(的常见格式;.tif)。对于许多GIS应用来说,,从DEM模型中提取每个像素的经纬度坐标和相应的高程信息是非常重要的。本文将详细介绍如何使用Python来实现这一目标。

1. 准备工作。

1.1 安装必要的库。

开始前,我们需要安装一些必要的Python库。包括这些库。rasterio。和。numpy。rasterio。它是一个库࿰,用于读取和写入地理空间格栅数据c;而。numpy。用于处理数组数据。

pip。 install。rasterio numpy。

1.2 导入库。

安装所需的库后,首先,我们需要导入它们:

import。rasterio。import。numpy。 as。np。from。rasterio。.。transform。 import。from_bounds。

2. 读取DEM数据。

2.1 打开TIF文件。

使用。rasterio。DEM文件࿱打开TIF格式a;

with。rasterio。.。open。(。'path_to_your_dem_file.tif')。as。dataset。:。# 获取DEM元数据。width。 =dataset。.。width    height。 =dataset。.。height    transform。 =dataset。.。transform    crs。 =dataset。.。crs    elevation_data。 =dataset。.。read。(。1。)。# 阅读第一波段(通常是高程数据)

2.2 理解元数据。

  • width。和。 height。分别表示图像的宽度和高度。
  • transform。仿射变换矩阵,将像素坐标转换为地理坐标。
  • crs。坐标参考系统,例如,WGS84(EPSG:4326)。
  • elevation_data。二维数组,包含每个像素点的高程值。

3. 提取经纬度坐标和高程信息。

3.1 从像素坐标到地理坐标的转换。

使用。rasterio。的。xy。该方法可将像素坐标转换为地理坐标#xff08;经纬度):

def。pixel_to_geo。(。x。,y。,transform。)。:。return。rasterio。.。transform。.。xy。(。transform。,y。,x。)。# 示例:获取图像中心点的地理坐标。center_x。 =width。 //。2。center_y。 =height。 //。2。center_lon。,center_lat。 =pixel_to_geo。(。center_x。,center_y。,transform。)。print。(。f"Center point geographic coordinates:。 { 。center_lat。}。")。

3.2 遍历所有像素点。

为了提取每个像素点的经纬度坐标和高程信息,我们需要遍历整个图像:

def。extract_all_points。(。elevation_data。,transform。)。:。points。 =[。]。for。y。 in。range。(。height。)。:。for。x。 in。range。(。width。)。:。lon。,lat。 =pixel_to_geo。(。x。,y。,transform。)。elevation。 =elevation_data。[。y。,x。]。points。.。append。(。(。lon。,lat。,elevation。)。)。return。pointsall_points。 =extract_all_points。(。elevation_data。,transform。)。

3.3 优化性能。

所有像素点都可能非常耗时,特别是对于大型DEM文件。我们可以使用Numpy的向量化操作来提高性能:

def。extract_all_points_optimized。(。elevation_data。,transform。)。:。y_indices。,x_indices。 =np。.。indices。(。(。height。,width。)。)。lons。,lats。 =rasterio。.。transform。.。xy。(。transform。,y_indices。,x_indices。)。elevations。 =elevation_data。.。flatten。(。)。points。 =list。(。zip。(。lons。.。flatten。(。)。,lats。.。flatten。(。)。,elevations。)。)。return。pointsall_points_optimized。 =extract_all_points_optimized。(。elevation_data。,transform。)。

4. 数据处理与分析。

4.1 转换为Pandas DataFrame。

为了更方便的数据处理和分析,我们可以将提取的点数据转换为Pandas DataFrame:

import。pandas。 as。pddf。 =pd。.。DataFrame。(。all_points_optimized。,columns。=[。'Longitude','Latitude','Elevation']。)。print。(。df。.。head。(。)。)。

4.2 数据可视化。

使用Matplotlib或Seaborn库可以可视化提取的数据:

import。matplotlib。.。pyplot。 as。pltplt。.。figure。(。figsize。=(。10。,8。)。)。plt。.。scatter。(。df。[。'Longitude']。,df。[。'Latitude']。,c。=df。[。'Elevation']。,cmap。='terrain')。plt。.。colorbar。(。label。='Elevation (m)')。plt。.。xlabel。(。'Longitude')。plt。.。ylabel。(。'Latitude')。plt。.。title。(。'DEM Elevation Data')。plt。.。show。(。)。

5. 进一步应用。

5.1 地形分析。

经纬度坐标和高程信息提取每个像素点后,可进行各种地形分析,如坡度、坡度、流域划分等。对水文模拟、城市规划等领域的分析非常重要。

5.2 三维可视化。

Python的三维可视化库(如Mayavi或Plotly)将DEM数据可视化为三维地形图󿀌为了更直观地展示地形特征。

5.3 与其它数据集成。

DEM数据与其他地理空间数据(土地利用、植被覆盖等)集成,可以进行更复杂的多因素分析,为决策提供支持。

6. 与CDA数据分析师相结合,提高技能。

处理地理空间数据时,掌握Python及其相关库非常重要。CDA数据分析师(Certified Data Analyst)认证可以帮助你系统地学习和掌握数据分析的各个方面,包括数据采集、处理和分析技巧。通过CDA认证󿀌您不仅可以提高GIS领域的技术能力,数据分析技能࿰也可以应用于金融、电信、零售等行业c;支持企业数字化转型和决策制定。

希望这篇文章对你有帮助,如果您有任何问题或建议󿀌欢迎在评论区留言!

2025-06-24 11:50:02

相关新闻

清华大学新闻中心版权所有,清华大学新闻网编辑部维护,电子信箱: news@tsinghua.edu.cn
Copyright 2001-2020 news.tsinghua.edu.cn. All rights reserved.