6

我有一个地球静止 eumetsat 卫星的 3712x3712 像素大小的图像。地球周围有一些黑色,因此图像看起来像这样:

不是 eumetsat 图像的示例图像

对于地球的每个像素,我想得到它的纬度和经度。我知道有 pyproj 并且我能够像这样实例化一个投影:

sat = pyproj.Proj('+proj=geos +lon_0 +h=035785831.0 +x_0=0 +y_0=0')

但是获取像素的纬度(使用图像sat(x,y,inverse=True)中像素xy坐标)显然是不可能的,因为投影不知道我图像的尺寸(3712x3712)。

我错过了什么?

4

2 回答 2

2

我认为您使用的是正确的投影库和设置。

典型的像素分辨率(km's per pixel)在 eumetsat 网站上报告在这里 它报告大约每像素 3km。

您可以通过在经线上将 lon/lat 转换为 x,y 并将其除以像素数(-81 度,81 度是最大范围,请参阅 eumetsat 站点以获取参考,http://www. eumetsat.int/ ):

import pyproj
sat = pyproj.Proj('+proj=geos +lon_0 +h=035785831.0 +x_0=0 +y_0=0')
x,y =  sat( 81.299, 0, radians = False, errcheck = True)
print (x * 2.0 / 3712.0 ) / 1000.0

将为您提供符合 eumetsat 提供的信息的 2.927 值。

接下来,您可以通过定义一组众所周知的地图点(例如海岸特征)、确定它们的 x/y 位置并在线查找它们的纬度/经度坐标来进一步校准。您可以尝试使用一系列像素分辨率并检查哪个最适合或使用更精细的例程。

分辨率可能取决于您与赤道的距离,请参见此处)。因此,您可能需要在多个纬度使用上述例程。

于 2012-07-06T15:11:53.440 回答
0

首先,这不是 EUMETSAT 图像。您的图像显示澳大利亚,地球同步 EUMETSAT 卫星位于(大约)(0°N,0°E)和(0°N,41.5°E)上方,用于零度服务 (ZDS) 和印度洋数据覆盖 (IODC) ) 服务,分别。两种观点都看不到澳大利亚。您的卫星图像可能来自日本气象厅 (JMA) 运营的多功能运输卫星 (MTSAT)成像仪,直到 2015 年被 HIMAWARI 取代。

要从 Meteosat SEVIRI、MTSAT、HIMAWARI AHI 或任何其他地球观测成像仪获取图像中像素的地理位置,您还可以考虑使用库读取数据:

from satpy import Scene
from glob import glob
filenames = glob('/path/to/your/files/*')  # for SEVIRI, can be HRIT, Native, or NetCDF
sc = Scene(filenames=filenames)
sc.load(["IR_108"], upper_right_corner="NE")
print(sc["IR_108"].attrs["area"].get_lonlat_from_array_coordinates(1000, 2000))

这使:

(-24.259016114751823, -3.9842388279769465)

对于地球静止图像,这不是最快的方法,因为答案是不变的,所以您不需要实际读取数据。但是,使用经过良好测试和广泛使用的库可以降低您出错的风险。至少,它可以作为参考。请记住,对于许多卫星成像仪,不同的通道具有不同的空间分辨率,因此答案可能取决于通道。1 级数据也可以存储为先南后北,这样简单的阅读和显示就会在图像的上部显示南部而在下部显示北部,这与映射约定相反。因此,值得验证您的结果是否准确。

于 2022-01-14T09:08:39.640 回答