Open-EO / openeo-geotrellis-extensions

Java/Scala extensions for Geotrellis, for use with OpenEO GeoPySpark backend.
Apache License 2.0
5 stars 3 forks source link

Use min/max nodes as input for linear_scale_range #263

Open EmileSonneveld opened 5 months ago

EmileSonneveld commented 5 months ago

This error should not happen when running the next process graph

py4j.protocol.Py4JJavaError: An error occurred while calling o1739.expressionEnd.
: java.lang.ClassCastException: class java.util.HashMap cannot be cast to class java.lang.Number (java.util.HashMap and java.lang.Number are in module java.base of loader 'bootstrap')
    at org.openeo.geotrellis.OpenEOProcessScriptBuilder.linearScaleRangeFunction(OpenEOProcessScriptBuilder.scala:1125)
    at org.openeo.geotrellis.OpenEOProcessScriptBuilder.expressionEnd(OpenEOProcessScriptBuilder.scala:1055)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
{
  "process_graph": {
    "apply3": {
      "arguments": {
        "data": {
          "from_node": "loadcollection1"
        },
        "process": {
          "process_graph": {
            "linearscalerange1": {
              "arguments": {
                "inputMax": {
                  "from_node": "max1"
                },
                "inputMin": {
                  "from_node": "min1"
                },
                "outputMax": 1,
                "outputMin": 0,
                "x": {
                  "from_parameter": "x"
                }
              },
              "process_id": "linear_scale_range",
              "result": true
            },
            "max1": {
              "arguments": {
                "data": {
                  "from_parameter": "x"
                },
                "ignore_nodata": true
              },
              "process_id": "max"
            },
            "min1": {
              "arguments": {
                "data": {
                  "from_parameter": "x"
                },
                "ignore_nodata": true
              },
              "process_id": "min"
            }
          }
        }
      },
      "process_id": "apply"
    },
    "loadcollection1": {
      "arguments": {
        "bands": [
          "B03"
        ],
        "id": "SENTINEL2_L1C",
        "spatial_extent": {
          "east": 9.759262,
          "north": 46.297543,
          "south": 46.166383,
          "west": 9.543174
        },
        "temporal_extent": [
          "2022-10-04",
          "2022-10-09"
        ]
      },
      "process_id": "load_collection"
    },
    "saveresult1": {
      "arguments": {
        "data": {
          "from_node": "apply3"
        },
        "format": "GTiff",
        "options": {}
      },
      "process_id": "save_result",
      "result": true
    }
  }
}
jdries commented 4 months ago

Location of the issue: https://github.com/Open-EO/openeo-geotrellis-extensions/blob/830d1f3610f3c2c4caeb7b91d7dc4fbd431aa3f3/openeo-geotrellis/src/main/scala/org/openeo/geotrellis/OpenEOProcessScriptBuilder.scala#L1287

This process graph will not give the expected result, because running min and max over a single value will just yield that value. So the first problem to solve would be computing an acutal min/max over a full data cube.