mirror of
https://github.com/google/earthengine-api.git
synced 2025-12-08 19:26:12 +00:00
234 lines
6.7 KiB
Python
234 lines
6.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Tests for the ee.Projection module."""
|
|
|
|
import json
|
|
from typing import Any, Dict
|
|
|
|
import unittest
|
|
import ee
|
|
from ee import apitestcase
|
|
|
|
CRS = 'crs'
|
|
TRANSFORM = 'transform'
|
|
TRANSFORM_WKT = 'transformWkt'
|
|
|
|
PROJECTION = 'Projection'
|
|
|
|
EPSG_4326 = 'EPSG:4326'
|
|
PROJECTION_EPSG_4326 = {
|
|
'functionInvocationValue': {
|
|
'functionName': 'Projection',
|
|
'arguments': {'crs': {'constantValue': EPSG_4326}},
|
|
}
|
|
}
|
|
|
|
|
|
def make_expression_graph(
|
|
function_invocation_value: Dict[str, Any],
|
|
) -> Dict[str, Any]:
|
|
return {
|
|
'result': '0',
|
|
'values': {'0': {'functionInvocationValue': function_invocation_value}},
|
|
}
|
|
|
|
|
|
class ProjectionTest(apitestcase.ApiTestCase):
|
|
|
|
def test_init(self):
|
|
crs = EPSG_4326
|
|
transform = [1, 2, 3, 4, 5, 6]
|
|
|
|
projection = ee.Projection(crs, transform=transform)
|
|
self.assertEqual({'value': 'fakeValue'}, projection.getInfo())
|
|
|
|
projection_func = ee.ApiFunction.lookup('Projection')
|
|
self.assertEqual(projection_func, projection.func)
|
|
self.assertFalse(projection.isVariable())
|
|
self.assertEqual(set(['crs', 'transform']), set(projection.args))
|
|
self.assertEqual(EPSG_4326, projection.args['crs'])
|
|
expected_transform = {
|
|
'result': '0',
|
|
'values': {'0': {'constantValue': [1, 2, 3, 4, 5, 6]}},
|
|
}
|
|
self.assertEqual(
|
|
expected_transform,
|
|
json.loads(projection.args['transform'].serialize()),
|
|
)
|
|
|
|
def test_init_transform_wkt(self):
|
|
crs = EPSG_4326
|
|
transform_wkt = (
|
|
'PARAM_MT["Affine",'
|
|
' PARAMETER["num_row",3],'
|
|
' PARAMETER["num_col",3],'
|
|
' PARAMETER["elt_0_1",1],'
|
|
' PARAMETER["elt_0_2",2],'
|
|
' PARAMETER["elt_1_2",3]]'
|
|
)
|
|
|
|
projection = ee.Projection(crs, transformWkt=transform_wkt)
|
|
self.assertEqual({'value': 'fakeValue'}, projection.getInfo())
|
|
|
|
projection_func = ee.ApiFunction.lookup('Projection')
|
|
self.assertEqual(projection_func, projection.func)
|
|
self.assertEqual(set(['crs', 'transformWkt']), set(projection.args))
|
|
self.assertEqual(EPSG_4326, projection.args['crs'])
|
|
expected_transform_wkt = {
|
|
'result': '0',
|
|
'values': {
|
|
'0': {
|
|
'constantValue': (
|
|
'PARAM_MT["Affine", PARAMETER["num_row",3], '
|
|
' PARAMETER["num_col",3], PARAMETER["elt_0_1",1], '
|
|
' PARAMETER["elt_0_2",2], PARAMETER["elt_1_2",3]]'
|
|
)
|
|
}
|
|
},
|
|
}
|
|
self.assertEqual(
|
|
expected_transform_wkt,
|
|
json.loads(projection.args['transformWkt'].serialize()),
|
|
)
|
|
projection_func = ee.ApiFunction.lookup('Projection')
|
|
self.assertEqual(projection_func, projection.func)
|
|
|
|
def test_serialize(self):
|
|
crs = 'EPSG:32610'
|
|
transform = [1, 2, 3, 4, 5, 6]
|
|
|
|
result = json.loads(ee.Projection(crs, transform=transform).serialize())
|
|
expect = {
|
|
'result': '0',
|
|
'values': {
|
|
'0': {
|
|
'functionInvocationValue': {
|
|
'arguments': {
|
|
'crs': {'constantValue': crs},
|
|
'transform': {'constantValue': transform},
|
|
},
|
|
'functionName': PROJECTION,
|
|
}
|
|
}
|
|
},
|
|
}
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_cast(self):
|
|
crs = 'EPSG:32610'
|
|
|
|
projection = ee.Projection(ee.Projection(crs))
|
|
result = json.loads(projection.serialize())
|
|
expect = {
|
|
'result': '0',
|
|
'values': {
|
|
'0': {
|
|
'functionInvocationValue': {
|
|
'arguments': {
|
|
'crs': {'constantValue': crs},
|
|
},
|
|
'functionName': PROJECTION,
|
|
}
|
|
}
|
|
},
|
|
}
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_at_scale(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'projection': PROJECTION_EPSG_4326,
|
|
'meters': {'constantValue': 1},
|
|
},
|
|
'functionName': 'Projection.atScale',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).atScale(1)
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
expression = ee.Projection(EPSG_4326).atScale(meters=1)
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_crs(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'projection': PROJECTION_EPSG_4326,
|
|
},
|
|
'functionName': 'Projection.crs',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).crs()
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_nominal_scale(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'proj': PROJECTION_EPSG_4326,
|
|
},
|
|
'functionName': 'Projection.nominalScale',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).nominalScale()
|
|
result = json.loads(expression.serialize())
|
|
print(result)
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_scale(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'projection': PROJECTION_EPSG_4326,
|
|
'x': {'constantValue': 1},
|
|
'y': {'constantValue': 2},
|
|
},
|
|
'functionName': 'Projection.scale',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).scale(1, 2)
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
expression = ee.Projection(EPSG_4326).scale(x=1, y=2)
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_transform(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'projection': PROJECTION_EPSG_4326,
|
|
},
|
|
'functionName': 'Projection.transform',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).transform()
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_translate(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'projection': PROJECTION_EPSG_4326,
|
|
'x': {'constantValue': 1},
|
|
'y': {'constantValue': 2},
|
|
},
|
|
'functionName': 'Projection.translate',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).translate(1, 2)
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
expression = ee.Projection(EPSG_4326).translate(x=1, y=2)
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
def test_wkt(self):
|
|
expect = make_expression_graph({
|
|
'arguments': {
|
|
'projection': PROJECTION_EPSG_4326,
|
|
},
|
|
'functionName': 'Projection.wkt',
|
|
})
|
|
expression = ee.Projection(EPSG_4326).wkt()
|
|
result = json.loads(expression.serialize())
|
|
self.assertEqual(expect, result)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|