Javascript 在Google Earth引擎中从聚合_直方图结果中获取值最大的密钥
在Google Earth Engine中,我从一个调用中获得一个对象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
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)似乎为空。