惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
I
InfoQ
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
博客园 - Franky
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
月光博客
月光博客
罗磊的独立博客

博客园 - 提高效率!

Python多进程处理数据 内网配置深度学习环境 Vscode个人配置喜好记录 python读取tfrecord单个数据 用python直接提取gee数据的value(无需下载) WSL下挂载移动硬盘 ubuntu统计当前目录下的文件数量 常见的距离算法和相似度计算方法 常用的坐标系及其EPSG编码 仿 GEE 的平台汇总 stata 学习 matplotlib 颜色速查 解决proplot和Matplotlib版本冲突问题 Matplotlib 设置画布 Landsat 使用QA波段去云 将社会脆弱性纳入高分辨率全球洪水风险绘图 Python绘图代码snippets Micro-Estimates of Wealth for all Low 数据搜集 Latex 符号速查表 Ubuntu 服务器常用命令
从tiff影像中提取多个点的像素值
提高效率! · 2025-02-10 · via 博客园 - 提高效率!
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()