Google Earth Engine Python API извлечено неверное значение MODIS NDVI

Я только начинаю работать с GEE Python API. Я хочу извлечь значения NDVI из отдельных пикселей продукта MODIS. Когда я запускаю это:

import ee
ee.Authenticate()
ee.Initialize()

t_start = ee.Date("2000-01-01")
t_end = ee.Date("2020-05-25")

AOI = ee.FeatureCollection("users/manuelpopp/xining")

MODIS = ee.ImageCollection("MODIS/006/MOD13Q1") \
    .filterDate(t_start, t_end).filterBounds(AOI)

MODIS_ndvi = MODIS.select("NDVI")

scenes = [scene.get("id") for scene in MODIS_ndvi.getInfo().get("features")]
scene = scenes[0]
img = ee.Image(scene)
p = ee.Geometry.Point(101.768548, 36.685077)
ndvit = img.reduceRegion(ee.Reducer.first(), p).get("NDVI").getInfo()

он установит ndvit равным 865. Однако значение NDVI не должно быть больше 1.

Что я здесь сделал не так? Полагаю, этому значению есть простое объяснение?


person Manuel Popp    schedule 03.06.2021    source источник


Ответы (1)


В официальной спецификации файла указано, что истинные значения (параметр) получаются с помощью следующего уравнения:

parameter=(file data - add_offset)/scale_factor

где file data — это значение в файле, а add_offset и scale_factor определяются, например, как


DataField_1     1 km 16 days NDVI       INT16           Dimension_1
                                                        Dimension_2

        DataField_1 HDF Attributes:
        Attribute       Data Type       Number of Values        Value or Max. String Length

        long_name       STRING          17      1 km 16 days NDVI
        units           STRING          4       NDVI
        valid_range     INT16           2       -2000, 10000
        _FillValue      INT16           1       -3000
        scale_factor    FLOAT64         1       10000
        scale_factor_err FLOAT64        1       0.0
        add_offset      FLOAT64         1       0.0
        add_offset_err  FLOAT64         1       0.0
        calibrated_nt   INT32           1       5

Значение scale_factor также есть в этой таблице (add_offset редко использовал).

Эти преобразования значений выполняются для экономии места на диске (что позволяет сохранять данные как 16-битное целое число, а не как 32- или 64-битное число с плавающей запятой).

person blindjesse    schedule 04.06.2021
comment
Спасибо. Я не ожидал, что они сделают такое, но, учитывая объем данных, которые они должны хранить, вероятно, имеет значение, в каком формате находятся ваши значения... - person Manuel Popp; 05.06.2021