@@ -789,9 +789,7 @@ def reduce_dimension(args: ProcessArgs, env: EvalEnv) -> DriverDataCube:
789
789
@process_registry_100 .add_function (
790
790
spec = read_spec ("openeo-processes/experimental/chunk_polygon.json" ), name = "chunk_polygon"
791
791
)
792
- @process_registry_100 .add_function (spec = read_spec ("openeo-processes/2.x/proposals/apply_polygon.json" ))
793
- @process_registry_2xx .add_function (spec = read_spec ("openeo-processes/2.x/proposals/apply_polygon.json" ))
794
- def apply_polygon (args : ProcessArgs , env : EvalEnv ) -> DriverDataCube :
792
+ def chunk_polygon (args : ProcessArgs , env : EvalEnv ) -> DriverDataCube :
795
793
# TODO #229 deprecate this process and promote the "apply_polygon" name.
796
794
# See https://github.com/Open-EO/openeo-processes/issues/287, https://github.com/Open-EO/openeo-processes/pull/298
797
795
data_cube = args .get_required ("data" , expected_type = DriverDataCube )
@@ -829,6 +827,46 @@ def apply_polygon(args: ProcessArgs, env: EvalEnv) -> DriverDataCube:
829
827
return data_cube .chunk_polygon (reducer = reduce_pg , chunks = polygon , mask_value = mask_value , context = context , env = env )
830
828
831
829
830
+ @process_registry_100 .add_function (spec = read_spec ("openeo-processes/2.x/proposals/apply_polygon.json" ))
831
+ @process_registry_2xx .add_function (spec = read_spec ("openeo-processes/2.x/proposals/apply_polygon.json" ))
832
+ def apply_polygon (args : ProcessArgs , env : EvalEnv ) -> DriverDataCube :
833
+ data_cube = args .get_required ("data" , expected_type = DriverDataCube )
834
+ process = args .get_deep ("process" , "process_graph" , expected_type = dict )
835
+ polygons = args .get_required ("polygons" )
836
+ mask_value = args .get_optional ("mask_value" , expected_type = (int , float ), default = None )
837
+ context = args .get_optional ("context" , default = None )
838
+
839
+ # TODO #114 EP-3981 normalize first to vector cube and simplify logic
840
+ # TODO: this logic (copied from original chunk_polygon implementation) coerces the input polygons
841
+ # to a single MultiPolygon of pure (non-multi) polygons, which is conceptually wrong.
842
+ # Instead it should normalize to a feature collection or vector cube.
843
+ if isinstance (polygons , DelayedVector ):
844
+ polygons = list (polygons .geometries )
845
+ for p in polygons :
846
+ if not isinstance (p , shapely .geometry .Polygon ):
847
+ reason = "{m!s} is not a polygon." .format (m = p )
848
+ raise ProcessParameterInvalidException (parameter = "polygons" , process = "apply_polygon" , reason = reason )
849
+ polygon = MultiPolygon (polygons )
850
+ elif isinstance (polygons , shapely .geometry .base .BaseGeometry ):
851
+ polygon = MultiPolygon (polygons )
852
+ elif isinstance (polygons , dict ):
853
+ polygon = geojson_to_multipolygon (polygons )
854
+ if isinstance (polygon , shapely .geometry .Polygon ):
855
+ polygon = MultiPolygon ([polygon ])
856
+ elif isinstance (polygons , str ):
857
+ # Delayed vector is not supported yet.
858
+ reason = "Polygon of type string is not yet supported."
859
+ raise ProcessParameterInvalidException (parameter = "polygons" , process = "apply_polygon" , reason = reason )
860
+ else :
861
+ reason = "Polygon type is not supported."
862
+ raise ProcessParameterInvalidException (parameter = "polygons" , process = "apply_polygon" , reason = reason )
863
+ if polygon .area == 0 :
864
+ reason = "Polygon {m!s} has an area of {a!r}" .format (m = polygon , a = polygon .area )
865
+ raise ProcessParameterInvalidException (parameter = "polygons" , process = "apply_polygon" , reason = reason )
866
+
867
+ return data_cube .apply_polygon (polygons = polygon , process = process , mask_value = mask_value , context = context , env = env )
868
+
869
+
832
870
@process_registry_100 .add_function (spec = read_spec ("openeo-processes/experimental/fit_class_random_forest.json" ))
833
871
@process_registry_2xx .add_function (spec = read_spec ("openeo-processes/experimental/fit_class_random_forest.json" ))
834
872
def fit_class_random_forest (args : dict , env : EvalEnv ) -> DriverMlModel :
0 commit comments