GEE中ui.Label无法输出字符串值,显示ee.String调用结构问题
GEE UI组件为何无法像print函数那样仅返回字符串值?
你的代码
//Geometrys var geometry = /* Generic Polygon */; var g1 = /* Generic Polygon */; //Geometrys Area var garea = ee.Number.parse(ee.Number.parse( geometry.area({'maxError': 1}) .divide(10000)) .format('%.2f')); var g1area = ee.Number.parse(ee.Number.parse( g1.area({'maxError': 1}) .divide(10000)) .format('%.2f')); //Panel var panel = ui.Panel({ layout: ui.Panel.Layout.Flow('vertical'), style: {position:'top-left'} }); var area_data = [ ee.String('Area total (ha):').cat(garea.getInfo()), ee.String('1: ').cat(g1area.getInfo())]; var area_label = ui.Label(area_data); panel.add(area_label); Map.add(panel); // 修正原代码语法错误:Map.add.(panel) → Map.add(panel)
运行错误输出
ee.String({ "type": "Invocation", "arguments": { "string1": "Area total (ha): ", "string2": 100 }, "functionName": "String.cat" }),ee.String({ "type": "Invocation", "arguments": { "string1": "1: ", "string2": 10 }
原因与解决方法
问题根源
ee.String().cat()返回的是GEE服务器端对象(ee.String实例),而非本地字符串。print()函数会自动解析服务器端对象并输出实际值,但UI组件(如ui.Label)不会做这个自动解析,直接传入就会显示对象的内部结构。- 你已经用
garea.getInfo()拿到了本地数值,却又把它传给ee.String.cat()重新包装成服务器端对象,完全是多此一举。
修复方案
直接用本地字符串拼接,不需要借助ee.String类:
// 替换原来的area_data定义 var area_data = [ 'Area total (ha): ' + garea.getInfo(), '1: ' + g1area.getInfo() ];
修改后,area_data里的元素都是普通本地字符串,传给ui.Label就能正常显示纯文本内容了。
内容的提问来源于stack exchange,提问作者William Belini
相关产品推荐
相关产品推荐

