首页 > 解决方案 > 使用纬度经度坐标从卫星图像中获取最近的像素值

问题描述

我有一个卫星图像文件。加载到 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']

这是 dask 数组的样子: 在此处输入图像描述 在此处输入图像描述

我在 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 的像素值(最近的)。

提前致谢!!!

标签: pythongisnetcdfpython-xarraysatellite-image

解决方案


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 坐标。


推荐阅读