Search code examples
javascriptintegergoogle-earth-engine

Google Earth Engine ee.Number to integer


This is probably a simple question for people familiarized with the Code Editor of Google Earth Engine (https://code.earthengine.google.com/) or generally Javascript.

In my code, I need to use the size of an object for a boolean conditional (e.g. n>0). However, the output of .size() which I would store in n does not return a plain integer, but a ee.Number structure and I am not being able to transform it into an integer to properly evaluate the conditional.

Example with the structure ee.Number of Earth Engine:

var n=ee.Number(1)
print(n)
print(n.int())
print(n==1)
print(n===1)
print(n.int()==1)
print(n.int()===1)
print(n.int()== parseInt(1))

This outputs these evaluate as false, even when I try to tast the number structure into an int.

1
1
false
false
false
false
false

note:

print(typeof n)

returns an object (JSON):

object

Any help very much appreciated. Thanks


Solution

  • This is due to how GEE works. Processing steps are constructed locally as objects and then only evaluated by the server once another function requires it.

    print is one of the functions that requires execution, this is why it shows as integer in your console.

    You can force evaluation with .getInfo()... this however should be used with caution, because everything is pulled to the client side, which can be problematic with big objects.

    So this works:

    var n=ee.Number(1)
    
    print(n)
    print(n.getInfo()==1)
    

    giving

    1
    true

    This section of the documentation explains the background.