微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用纬度经度坐标从卫星图像中获取最近的像素值

如何解决使用纬度经度坐标从卫星图像中获取最近的像素值

我有一个卫星图像文件。加载到 dask 数组中。我想获得感兴趣的纬度、经度的像素值(最近的)。

卫星图像采用 GEOS 投影。我有 2D numpy 数组的经度和纬度信息。

Satellite Image file

我已将其加载到 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 数组的样子:

enter image description here

enter image description here

我在 satpy 的帮助下从 area 属性中读取了 lon lats:

lon,lat = scn['VIS006'].attrs['area'].get_lonlats()
print(lon.shape)
print(lat.shape)

(1179,808)
(1179,808)

我每个都有一个 2d numpy 数组,用于坐标的经度和纬度,但我不能将它们用于切片或选择。

获取最近经纬度像素信息的最佳实践/方法是什么? 我如何将数据投影到经纬度坐标上,然后我可以将其用于索引以得出像素值。

最后,我想获得感兴趣的经纬度的像素值(最近的)。

提前致谢!!!

解决方法

您正在使用的 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 坐标。

,

您可以通过以下方式找到位置:

import numpy as np
px,py = (23.0,55.0) # some location to take out values:

dist = np.sqrt(np.cos(lat*np.pi/180.0)*(lon-px)**2+(lat-py)**2); # this is the distance matrix from point (px,py)
kkout = np.squeeze(np.where(np.abs(dist)==np.nanmin(dist))); # find location where distance is minimum
print(kkout) # you will see the row and column,where to take out data
,

@serge ballesta - 感谢指导

回答我自己的问题。

将纬度和经度(platecaree 投影)投影到 GEOS 投影 CRS 上。找到 x 和 y。使用 xarray 的 x 和 y 以及最近的选择方法从 dask 数组中获取像素值。

import cartopy.crs as ccrs

data_crs = ccrs.Geostationary(central_longitude=41.5,satellite_height=35785831,false_easting=0,false_northing=0,globe=None,sweep_axis='y')

lon = 77.541677 # longitude of interest
lat = 8.079148 # latitude of interst

# lon lat system in 
x,y = data_crs.transform_point(lon,lat,src_crs=ccrs.PlateCarree())

dn = ds.sel(x=x,y=y,method='nearest')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。