Javascript 在Google Earth引擎中从聚合_直方图结果中获取值最大的密钥

Javascript 在Google Earth引擎中从聚合_直方图结果中获取值最大的密钥,javascript,max,google-earth-engine,Javascript,Max,Google Earth Engine,在Google Earth Engine中,我从一个调用中获得一个对象obj,并且print(obj)显示以下内容: { "115.0": 1, "137.0": 1, "35.0": 137, "42.0": 164 } 我想提取一个值最大的键,即“42.0”(这应该是所有人都满意的,因为它是任何大问题的正确答案) 我怎样才能继续 我知道如何在纯JavaScript中实现这一点,但在这里它似乎不起作用: print(Object.keys(obj)) // yields

在Google Earth Engine中,我从一个调用中获得一个对象
obj
,并且
print(obj)
显示以下内容:

{
  "115.0": 1,
  "137.0": 1,
  "35.0": 137,
  "42.0": 164
}
我想提取一个值最大的键,即“42.0”(这应该是所有人都满意的,因为它是任何大问题的正确答案)

我怎样才能继续

我知道如何在纯JavaScript中实现这一点,但在这里它似乎不起作用:

print(Object.keys(obj))    // yields "[]"
编辑:在Kosh的第一个答案后添加更多信息

var obj = loc.aggregate_histogram('relativeOrbitNumber_start')

var o = {
  "115.0": 1,
  "137.0": 1,
  "35.0": 137,
  "42.0": 164
};

print(o)
print(obj)
print(Object.keys(o))
print(Object.keys(obj))

这将产生以下结果:

{
  "115.0": 1,
  "137.0": 1,
  "35.0": 137,
  "42.0": 164
}

使用
减少:

const o={
"115.0": 1,
"137.0": 1,
"35.0": 137,
"42.0": 164
};
const max=Object.keys(o).reduce((m,k)=>o[m]>o[k]?m:k)

log(max)
它似乎与客户端和服务器端变量有关

因此,需要服务端处理步骤

以下是一些似乎有效的方法:

var o = ee.Dictionary(loc.aggregate_histogram('relativeOrbitNumber_start'))
var okeys = ee.List(o.keys())
var ovals = ee.List(o.values())

var minmax = ee.Dictionary(ovals.reduce(ee.Reducer.minMax()))
var maxval = ee.Number(minmax.get('max'))
var maxind = ovals.indexOf(maxval)
var maxkey = okeys.get(maxind)

print('maxkey:', maxkey)

不幸的是,该变量不能用作
filtermatadata
的输入:

// this yields an empty collection, where maxKey = 42.0:
var sel = loc.filterMetadata('relativeOrbitNumber_start', 'equals', maxKey)

// this yields a non-empty collection:
var sel = loc.filterMetadata('relativeOrbitNumber_start', 'equals', 42.0)

因此,我首先必须使用getInfo将其放入客户端,如所示


这看起来像个bug,为什么filterMetadata不能接受服务器端变量作为参数呢?特别是因为使用
getInfo()
是一种非常简单的方法。谢谢但是你试过这个吗?对象。键(obj)似乎为空。