VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 从tiff 影像中提取多个点的像素值

 

import rasterio
import pandas as pd
def extract_values_from_tif(df: pd.DataFrame, tif_path: str, keys: list) -> pd.DataFrame:
    """
    从 TIFF 影像中提取多个点的像素值,仅提取 keys 指定的波段,并处理 NaN 值。
 
    参数:
        df (pd.DataFrame): 包含经纬度信息的 DataFrame,列名需包含 'longitude' 和 'latitude'。
        tif_path (str): 栅格文件路径。
        keys (list): 需要提取的波段名称列表(如 ['Band_1', 'Band_3'])。
 
    返回:
        pd.DataFrame: 在原始 DataFrame 基础上添加指定波段的像素值列。
    """
    with rasterio.open(tif_path) as src:
        # 获取波段名称,如果 descriptions 为空,则用默认索引名
        band_names = src.descriptions if src.descriptions else [f'Band_{i+1}' for i in range(src.count)]
        
        # 确保 keys 在 band_names 里
        valid_keys = [key for key in keys if key in band_names]
        if not valid_keys:
            raise ValueError(f"提供的 keys {keys} 不在影像的波段 {band_names} 中")
 
        # 获取 keys 对应的波段索引(rasterio 以 1 开始计数)
        band_indices = [band_names.index(key) + 1 for key in valid_keys]
 
        # 采样点坐标
        points = list(zip(df["longitude"], df["latitude"]))
 
        # 采样数据
        sampled_values = np.array(list(src.sample(points, indexes=band_indices)))
        sampled_values = np.nan_to_num(sampled_values, nan=0)
 
    df[valid_keys] = sampled_values
    return df.copy()

来源:https://www.cnblogs.com/geoli/p/18708061


相关教程