簡體   English   中英

如何在 GEE 中將 FeatureCollection 從 Javascript 轉換為 Python API?

[英]How to convert from Javascript to Python API for FeatureCollection in GEE?

我有一個運行良好的 JS 代碼:

dataset = ee.Image('USGS/SRTMGL1_003');
elevation = dataset.select('elevation');

var means_of_tea = tea.map(function(field){
  var elevation_mean = elevation.reduceRegion({
    reducer: ee.Reducer.mean(),
    geometry: field.geometry(),
    scale: 30,
    maxPixels: 1e9
  });
  var slope_mean = slope.reduceRegion({
    reducer: ee.Reducer.mean(),
    geometry: field.geometry(),
    scale: 30,
    maxPixels: 1e9
  });
  return field.set({elevation:elevation_mean, slope:slope_mean});

我試圖將代碼轉換為python:

def map_fc(field):
  elevation_mean = elevation.reduceRegion({
      'reducer': ee.Reducer.mean(),
      'geometry': field.geometry(),
      'scale': 30,
      'maxPixels': 1e9
  })
  return field.set({'elevation': elevation_mean})
teawithmean = tea.map(map_fc)

但給出了錯誤:

<ipython-input-36-e999072d4723> in <module>()
      9   })
     10   return field.set({'elevation': elevation_mean})
---> 11 teawithmean = tea.map(inmap)

17 frames
/usr/local/lib/python3.6/dist-packages/ee/__init__.py in init(self, *args)
    397           raise EEException(
    398               'Invalid argument for ee.{0}(): {1}.  '
--> 399               'Must be a ComputedObject.'.format(name, args))
    400         else:
    401           result = args[0]

EEException: Invalid argument for ee.Reducer(): ({'reducer': <ee.Reducer object at 0x7f3b4699e4a8>, 'geometry': ee.Geometry({
  "functionInvocationValue": {
    "functionName": "Feature.geometry",
    "arguments": {
      "feature": {
        "argumentReference": null
      }
    }
  }
}), 'scale': 30, 'maxPixels': 1000000000.0},).  Must be a ComputedObject.

我已經閱讀了將表單 JS 轉換為 python 的谷歌指南,但不知道為什么會發生這種情況。 錯誤是由於錯誤的語法嗎?

在 Python EE API 中,使用 Python 命名參數語法而不是字典作為參數。

  elevation_mean = elevation.reduceRegion(
      reducer=ee.Reducer.mean(),
      geometry=field.geometry(),
      scale=30,
      maxPixels=1e9
  )

請注意,屬性名稱不是命名參數,因此set()工作方式與 JavaScript 中的相同; 您可以使用或不使用字典,但不要使用=

return field.set({'elevation': elevation_mean})
# or
return field.set('elevation', elevation_mean)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM