10 votos

Obtenga el tipo de objeto de Earth Engine

Para la depuración sería genial para averiguar cuál de EE tipo de objeto es un objeto.

Ejemplo de código que añade un buffer a un punto en una zona de azar:

var polygon = ee.Geometry.Point([0,51.477]).buffer(10000); // a circle in London
var random_points = ee.FeatureCollection.randomPoints(polygon.bounds(), 100); // 100 random points in London
var point_list = random_points.geometry().geometries();
print(point_list); // prints -- List (100 elements)
var one_point = point_list.get(10); // The 11th point.
print(one_point); // prints -- Point (-0.03, 51,52)
var small_circle = one_point.buffer(100);
print(small_circle); // Error -- one_point.buffer is not a function...

Desde la consola se imprime Point..., yo creo que one_point es de tipo ee.Geometry.Point. Sin embargo, de acuerdo a la documentación ee.Geometry objetos se supone que el apoyo de la .buffer() función, que este no apoyo. Por lo tanto asumo que es un tipo diferente de objeto, pero no tengo ni idea de cual. Cuando me de código en la Tierra del Motor, me encuentro con este tipo de problemas muy a menudo.

Hay una manera de averiguar qué tipo de EE objeto un objeto es? Algo así como la fantasía .EE_OBJECT_TYPE() función aquí:

print(polygon.EE_OBJECT_TYPE()); // should print -- ee.Geometry.Polygon
print(one_point.EE_OBJECT_TYPE()); // should print -- ee.WhateverObjectThisIs

No soluciones:

  • print(my_object) a menudo indica el tipo de objeto, sino que, como el ejemplo de arriba muestra, este no es siempre el caso (o correcta).
  • my_object.type() solo se especifica el tipo de ee.Geometry y no funciona en ninguna de las otras EE objetos de acuerdo a la documentación.
  • my_object.typeOf() siempre devuelve object de EE objetos.

4voto

Jeyanth Kumar Puntos 142

La respuesta está peligrosamente cerca de tu no solución, pero el tipo de objeto con el que estás tratando es ee.ComputedObject . La solución a su problema en este caso es convertir a ee.Geometry .

 var polygon = ee.Geometry.Point([0,51.477]).buffer(10000); // a circle in London    
var random_points = ee.FeatureCollection.randomPoints(polygon.bounds(), 100); // 100 random points in London
var point_list = random_points.geometry().geometries();
print(point_list); // prints -- List (100 elements)
var one_point = point_list.get(10); // The 11th point.
print(one_point); // prints -- Point (-0.03, 51,52)
var small_circle = ee.Geometry(one_point).buffer(100);
print(small_circle);

print(one_point instanceof ee.ComputedObject) // true
 

2voto

OlegBrrr Puntos 66

one_point.name() // ComputedObject devuelve lo que este tipo de objeto es arrojado a la. De mis pruebas rápidas parece el más bajo nivel de objeto prototipo para que instanceof devuelve true. Fuente (es necesario iniciar sesión para acceder a este enlace, pero todos los que trabajan con EE puede obtener acceso a este grupo).

Bueno viejo print(one_point) devuelve el 'real' tipo de objeto (seguido por el objeto en sí mismo) - i. e. cómo el comportamiento de los objetos.

Estos pueden diferir. Para entender realmente un objeto, tendrás que llamar a ambos. Si desea utilizar el objeto como parámetro de función para una función que sólo toma por ejemplo ee.Geometry, necesitará one_point.name() === 'Geometry'. El tipo indicado por print() indica qué funciones admite el objeto.

Estas conclusiones se deriva solamente de un par de pruebas que yo hice y que podría estar equivocado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X