python - 使用纬度经度坐标从卫星图像中获取最近的像素值
问题描述
我有一个卫星图像文件。加载到 dask 数组中。我想获得感兴趣的纬度、经度的像素值(最近的)。
卫星图像在 GEOS 投影中。我将经度和纬度信息作为 2D numpy 数组。
我已将其加载到 dask 数据数组中
from satpy import Scene
import matplotlib as plt
import os
cwd = os.getcwd()
fn = os.path.join(cwd, 'EUMETSAT_data/1Jan21/MSG1-SEVI-MSG15-0100-NA-20210101185741.815000000Z-20210101185757-1479430.nat')
files = [fn]
scn = Scene(filenames=files, reader='seviri_l1b_native')
scn.load(["VIS006"])
da = scn['VIS006']
我在 satpy 的帮助下从 area 属性中读取了 lon lats:
lon, lat = scn['VIS006'].attrs['area'].get_lonlats()
print(lon.shape)
print(lat.shape)
(1179, 808)
(1179, 808)
我每个都得到一个 2d numpy 数组,用于坐标的经度和纬度,但我不能将它们用于切片或选择。
获取最近的经纬度像素信息的最佳实践/方法是什么?如何将数据投影到经纬度坐标上,然后我可以将其用于索引以得出像素值。
最后,我想获得感兴趣的 lat long 的像素值(最近的)。
提前致谢!!!
解决方案
AreaDefinition
您正在使用的对象 ( .attrs['area']
) 有几种获取不同坐标信息的方法。
area = scn['VIS006'].attrs['area']
col_idx, row_idx = area.get_xy_from_lonlat(lons, lats)
scn['VIS006'].values[row_idx, col_idx]
请注意,行和列是翻转的。该get_xy_from_lonlat
方法应该适用于数组或标量。
如果您对此感兴趣,还有其他方法可以获取每个像素的 X/Y 坐标。
推荐阅读
- r - R - tmap:添加粗边界并将具有 NA 的县转换为对角线条纹
- python - 当局部变量 line 为 #out 时,在 For 循环范围内识别 NumberOfSymbols。为什么它扮演一个全球性的角色?
- spring - 是否可以在 SpringBatch 的 JdbcBatchItemWriter() 方法中编写更新查询
- mysql - 在多行中的两列之间选择值
- authentication - Blazor - 在不同布局之间使用级联身份验证状态
- machine-learning - 如果我的 R2 高但 RMSE 和 MAE 低,这意味着什么
- excel - 如何使用变量选择一行
- react-native - 在 react-native 中使文本模糊
- c++ - 将一个元素从一个向量复制到另一个向量
- java - bean-validation @Pattern 第一个数字是 '1'