伊迩 2025-05-29 11:18 采纳率: 66.7%
浏览 8
已结题

关于Himawari数据和GPM数据

1.请问,为什么我Himawari读取的经纬度信息,其中文件分析和数组创建的纬度方向是反的?但GPM的数据纬度方向又是一样的,下面是读取的信息
2.为什么Himawari数据分辨率读取起来的是-0.02 是负数
3.请问Himawari数据和GPM数据的经纬度方向到底是如何?

文件路径: E:\XC\Hzj_tif\tbb_09.tif
数据形状: (211, 261) (高度 x 宽度)
波段数: 1
数据类型: ('float32',)
CRS (坐标参考系统): EPSG:4326
地理变换矩阵: | 0.02, 0.00, 118.00|
| 0.00,-0.02, 31.20|
| 0.00, 0.00, 1.00|
像素大小 (x方向): 0.01992337164750959
像素大小 (y方向): -0.019905213270142177
边界 (左, 下, 右, 上): BoundingBox(left=118.0, bottom=27.0, right=123.2, top=31.2)
左上角坐标 (x, y): (118.000000, 31.200000)
右上角坐标 (x, y): (123.180077, 31.200000)
左下角坐标 (x, y): (118.000000, 27.019905)
右下角坐标 (x, y): (123.180077, 27.019905)
纬度方向: 从上到下递减 (North to South)
经度方向: 从左到右递增 (West to East)
纬度范围: 27.009953 到 31.190047
经度范围: 118.009962 到 123.190038
Himawari 坐标数组创建
纬度数组: 从最大值到最小值 (递减)
经度数组: 从最小值到最大值 (递增)
纬度数组形状: (211,), 范围: 31.190047 到 27.009953
经度数组形状: (261,), 范围: 118.009962 到 123.190038

GPM 文件分析
文件路径: E:\XC\tif\3B-0515-S110000-masked.tif
数据形状: (42, 52) (高度 x 宽度)
波段数: 1
数据类型: ('float32',)
CRS (坐标参考系统): EPSG:4326
地理变换矩阵: | 0.10, 0.00, 118.00|
| 0.00, 0.10, 27.00|
| 0.00, 0.00, 1.00|
像素大小 (x方向): 0.09999997008080576
像素大小 (y方向): 0.10000000930413967
边界 (左, 下, 右, 上): BoundingBox(left=117.99999543732288, bottom=31.199999623182343, right=123.19999388152478, top=26.999999232408477)
左上角坐标 (x, y): (117.999995, 26.999999)
右上角坐标 (x, y): (123.099994, 26.999999)
左下角坐标 (x, y): (117.999995, 31.100000)
右下角坐标 (x, y): (123.099994, 31.100000)
纬度方向: 从上到下递增 (South to North)
经度方向: 从左到右递增 (West to East)
纬度范围: 27.049999 到 31.150000
经度范围: 118.049995 到 123.149994
GPM 坐标数组创建
纬度数组: 从最小值到最大值 (递增)
经度数组: 从最小值到最大值 (递增)
纬度数组形状: (42,), 范围: 27.049999 到 31.150000
经度数组形状: (52,), 范围: 118.049995 到 123.149994

  • 写回答

4条回答 默认 最新

  • 一杯年华@编程空间 2025-05-29 12:43
    关注

    一杯年华@编程空间帮您解答,本答案结合 ChatGPT4.0和DeepSeek整理

    我曾经遇到过类似的问题,在处理Himawari和GPM数据时,也碰到了经纬度方向不一致、分辨率负值等情况。这主要是因为不同数据源的投影方式、地理变换矩阵定义存在差异。Himawari数据纬度方向从上到下递减,且y方向分辨率为负,而GPM数据纬度方向从上到下递增,y方向分辨率为正。下面为你分析几种解决方案:

    方案一:翻转纬度数组实现方向统一

    原理:通过反转Himawari纬度数组的顺序,使其与GPM的“从上到下递增”方向一致,同时调整地理变换矩阵的y系数为正值。
    步骤

    1. 利用NumPy反转Himawari纬度数组,使其从最小值到最大值递增。
    2. 修改地理变换矩阵中y方向的系数(将负值改为正值),消除分辨率负值问题。

    代码片段

    import numpy as np
    from rasterio.transform import from_bounds
    
    # 假设原始Himawari纬度数组(递减)
    himawari_lat = np.linspace(31.190047, 27.009953, 211)  
    # 翻转纬度数组为递增顺序
    himawari_lat_reversed = himawari_lat[::-1]  
    
    # 原始地理变换矩阵(y方向系数为-0.02)
    transform = from_bounds(118.0, 27.0, 123.2, 31.2, 261, 211)  
    transform = list(transform)  
    # 修改y方向系数为正值
    transform[5] = abs(transform[5])  
    print("修正后的纬度数组:", himawari_lat_reversed)
    print("修正后的地理变换矩阵y系数:", transform[5])
    

    方案二:调整数据读取逻辑适配不同方向

    原理:在读取数据时,根据数据源类型(Himawari或GPM)动态确定纬度数组的生成方向,避免后续处理的翻转操作。
    步骤

    1. 读取数据时先判断数据源,若为Himawari则从最大纬度开始生成递减数组;若为GPM则从最小纬度开始生成递增数组。
    2. 在可视化或分析时,统一以“北到南”或“南到北”的方向进行展示。

    代码片段

    def create_lat_array(data_type, max_lat, min_lat, size):
        if data_type == "himawari":
            # 生成递减纬度数组(北到南)
            return np.linspace(max_lat, min_lat, size)
        elif data_type == "gpm":
            # 生成递增纬度数组(南到北)
            return np.linspace(min_lat, max_lat, size)
    
    # 示例调用
    himawari_lat = create_lat_array("himawari", 31.190047, 27.009953, 211)
    gpm_lat = create_lat_array("gpm", 27.049999, 31.150000, 42)
    print("Himawari纬度数组(递减):", himawari_lat)
    print("GPM纬度数组(递增):", gpm_lat)
    

    最优方案:方案一(翻转纬度数组)

    推荐理由

    1. 兼容性强:无需修改数据读取逻辑,直接通过数组操作统一方向,适用于多种数据处理场景。
    2. 直观易维护:代码逻辑简单,仅需一次数组反转和矩阵系数修改,后续处理可统一按GPM的递增方向进行。
    3. 避免混淆:修正后的数据坐标方向与常规地理坐标系(南到北递增)一致,减少人为判断误差。

    关键代码说明

    • himawari_lat[::-1]:通过切片操作反转数组,将纬度从“北到南递减”转为“南到北递增”。
    • transform[5] = abs(transform[5]):地理变换矩阵的第6个元素(索引5)代表y方向分辨率,取绝对值后消除负值。

    希望以上方案能帮你解决问题!如果需要进一步调试代码或解释细节,可以随时留言。请楼主采纳~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月29日