Я работаю с Google EarthEngine (Python API, но это не имеет большого значения). У меня есть коллекция ImageCollection, которую нужно уменьшить на регион для каждого отдельного изображения (изображения массива np) в коллекции.
Я хочу построить коллекцию изображений временного ряда в виде изображения массива np (например, файла NetCDF) для дальнейший анализ. Я построил один код здесь, который я использую для l oop для создания коллекции изображений массива временных рядов np (широта, долгота, время, данные), но я не понял, как это сделать с соответствующим кодом.
Показывает проблему измерения нежелательной ошибки.
Пожалуйста, помогите разработчику решить эту проблему или поищите другие способы / хитрости, а затем предложите мне.
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 2 15:49:17 2020
@author: HONEY
"""
##------Import Library---------------------------------------------------------
## processing -->>
import time
from datetime import datetime as dt
import warnings
warnings.filterwarnings('ignore')
np.set_printoptions(suppress=True)
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib
matplotlib.rc('font', **{'size': 16})
# Import the Earth Engine Python Packages
import ee
import ee.mapclient
ee.Initialize()
##-----------------------------------------------------------------------------
# Define the area
area = ee.Geometry.Polygon([[[-81.76903193287582,27.802143094663233],\
[-80.7129711418602,27.802143094663233],\
[-80.7129711418602,28.551464360900866],\
[-81.76903193287582,28.551464360900866],\
[-81.76903193287582,27.802143094663233]]])
Bands = ['BRDF_Albedo_Parameters_vis_iso', 'BRDF_Albedo_Parameters_vis_vol',\
'BRDF_Albedo_Parameters_vis_geo']
collection1 = ee.ImageCollection('MODIS/006/MCD43A1')\
.filterBounds(area)\
.filterDate('2018-05-01','2018-05-3')\
.select(Bands)
print(" number of image: ",collection1.size().getInfo())
# Get list of images which correspond with the above
images = [item.get('id') for item in collection1.getInfo().get('features')]
# Loop over all images and make collection of np array image
for image in images:
print('Albedo_Data: ',image)
im = ee.Image(image)
# CRS=im.projection().getInfo()['crs']
CRS='EPSG:4326'
# Obtain date from timestamp in metadata
date = dt.fromtimestamp(im.get("system:time_start").getInfo() / 1000.)
print(date,"date")
# Extract pixel value
data= im.select(Bands)
# print(data.getInfo())
latlon = ee.Image.pixelLonLat().addBands(data)
countRes=latlon.reduceRegion(reducer=ee.Reducer.count(),\
crs=CRS,geometry=collection.geometry().bounds(),\
maxPixels=1e50, scale=500)
dictt = latlon.reduceRegion(ee.Reducer.toList(),\
crs=CRS,geometry=collection.geometry().bounds(),\
maxPixels=1e50, scale=500)
lats = np.array((ee.Array(dictt.get("latitude")).getInfo()))
print("Lats_value:",lats,"Lats_Size:",lats.size)
lons = np.array((ee.Array(dictt.get("longitude")).getInfo()))
print("lons_value:",lats,"lons_Size:",lats.size)
#print("First five (lon,lat) pairs:"); list(zip(lons[:5], lats[:5]))
#variables(Bands)
dim=np.sqrt(countRes.get('BRDF_Albedo_Parameters_vis_iso').getInfo()).astype(np.int16)
vis_iso = np.array((ee.Array(dictt.get("BRDF_Albedo_Parameters_vis_iso")).getInfo())).astype(np.float)
vis_vol = np.array((ee.Array(dictt.get("BRDF_Albedo_Parameters_vis_vol")).getInfo())).astype(np.float)
vis_geo = np.array((ee.Array(dictt.get("BRDF_Albedo_Parameters_vis_geo")).getInfo())).astype(np.float)
nrows, ncols = dim, dim
# plot
fig = plt.figure(figsize=(16,5))
ax1 = fig.add_subplot(1,4,1)
ax1.imshow(lon2d, cmap=cm.plasma);
ax1.set_title("x coordinate")
ax2 = fig.add_subplot(1,4,2, sharey=ax1)
ax2.imshow(lon2d, cmap=cm.cividis);
ax2.set_title("longitude")