This is an automated email from the ASF dual-hosted git repository.

rpardomeza pushed a commit to branch WAYANG-agoraeo
in repository https://gitbox.apache.org/repos/asf/incubator-wayang.git


The following commit(s) were added to refs/heads/WAYANG-agoraeo by this push:
     new c8a71cb5 Basic Patch Definition
c8a71cb5 is described below

commit c8a71cb56c99420e987d8378b29c55a88d122245
Author: Rodrigo Pardo Meza <[email protected]>
AuthorDate: Tue Feb 7 16:29:14 2023 +0100

    Basic Patch Definition
---
 .../org/apache/wayang/agoraeo/MakePatches.java     | 19 +++++-
 .../wayang/agoraeo/patches/BandMetadata.java       | 65 +++++++++++++++---
 .../org/apache/wayang/agoraeo/patches/Patch.java   | 79 ++++++++++++++++++++++
 3 files changed, 153 insertions(+), 10 deletions(-)

diff --git 
a/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/MakePatches.java
 
b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/MakePatches.java
index 0a11e3f0..b86b709c 100644
--- 
a/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/MakePatches.java
+++ 
b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/MakePatches.java
@@ -21,6 +21,7 @@ package org.apache.wayang.agoraeo;
 import org.apache.wayang.agoraeo.patches.Band;
 import org.apache.wayang.agoraeo.patches.BandMetadata;
 import org.apache.wayang.agoraeo.patches.L2a_file;
+import org.apache.wayang.agoraeo.patches.Patch;
 import org.apache.wayang.basic.operators.CollectionSource;
 import org.apache.wayang.basic.operators.FlatMapOperator;
 import org.apache.wayang.basic.operators.LocalCallbackSink;
@@ -203,11 +204,20 @@ public class MakePatches {
                 Band.class
         );
 
-        MapOperator<Band, BandMetadata> metadata = new MapOperator<>(t-> new 
BandMetadata(t), Band.class,BandMetadata.class);
+        MapOperator<Band, BandMetadata> metadata = new 
MapOperator<>(BandMetadata::new, Band.class,BandMetadata.class);
 
+        FlatMapOperator<BandMetadata, Patch> patches_data = new 
FlatMapOperator<BandMetadata, Patch>(
+                t -> {
+                    List<Patch> band_patches = createPatchesPerBand(t);
+                    return band_patches;
+                },
+                BandMetadata.class,
+                Patch.class
+        );
 
-        LocalCallbackSink<BandMetadata> sink = 
LocalCallbackSink.createCollectingSink(result, BandMetadata.class);
 
+        LocalCallbackSink<BandMetadata> sink = 
LocalCallbackSink.createCollectingSink(result, BandMetadata.class);
+        // his band.resolution = our pixel_resolution
 
 //        String outputFileUrl = 
"file:///Users/rodrigopardomeza/tu-berlin/agoraeo/agoraeo/outputs/patches.log";
 //        TextFileSink<String> sink = new TextFileSink<>(outputFileUrl, 
String.class);
@@ -223,6 +233,11 @@ public class MakePatches {
         return new WayangPlan(sink);
     }
 
+    private static List<Patch> createPatchesPerBand(BandMetadata t) {
+        /* TODO: Pipeline to get the data for patches from each Band */
+        return new ArrayList<>();
+    }
+
     private static List<Band> processResolution(String img_folder, String 
resolution, L2a_file l2a_file) {
 
         // Missing to filter only the bands relevant to each resolution
diff --git 
a/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/BandMetadata.java
 
b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/BandMetadata.java
index 1c4c10d2..55223e0b 100644
--- 
a/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/BandMetadata.java
+++ 
b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/BandMetadata.java
@@ -23,12 +23,14 @@ import org.gdal.gdal.*;
 import org.gdal.osr.SpatialReference;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 public class BandMetadata implements Serializable {
 
 
     private final String utm;
-    private final String resolution;
+    private final String band_resolution;
     private final String band_name;
 
     /*TODO: Band raster is just the first of the bands of the raster, I don't 
know how representative it is*/
@@ -42,11 +44,13 @@ public class BandMetadata implements Serializable {
     private final Integer espg;
     private final String projection;
 
+    private final Tuple2<Integer, Integer> patch_size;
+
     public BandMetadata(Band b) {
         gdal.AllRegister();
         this.utm = b.getUtm();
         this.band_name = b.getBand_name();
-        this.resolution = b.getResolution();
+        this.band_resolution = b.getResolution();
         this.local_path = b.getBand_path();
         this.band_source = gdal.Open(b.getBand_path());
         this.size = new Tuple2<>(this.band_source.GetRasterXSize(), 
this.band_source.getRasterYSize());
@@ -61,6 +65,18 @@ public class BandMetadata implements Serializable {
         this.band_raster = this.band_source.GetRasterBand(1);
         String code_espg = new 
SpatialReference(this.projection).GetAttrValue("AUTHORITY", 1);
         this.espg = checkCode(code_espg);
+
+        Map<Double, Tuple2<Integer, Integer>> pxl_mapping_to_patch = new 
HashMap<>();
+        pxl_mapping_to_patch.put(10d, new Tuple2<>(120,120));
+        pxl_mapping_to_patch.put(20d, new Tuple2<>(60,60));
+        pxl_mapping_to_patch.put(60d, new Tuple2<>(20,20));
+        Double pxl = Math.abs(this.pixel_resolution.field0);
+        this.patch_size = new Tuple2<>(pxl_mapping_to_patch.get(pxl).field0, 
pxl_mapping_to_patch.get(pxl).field1);
+        /* TODO Take into account these differences respect to Viktor's 
pipeline:
+        * 1. V's Projection is taken from any of the bands
+        * 2. V's and ours band_raster is the band_raster(1). But theoretically 
we should work with a Dataset of them
+        * NOTE: V is assuming *_steps are the same for every resolution
+        * */
     }
 
     private Integer checkCode(String code_espg) {
@@ -88,6 +104,22 @@ public class BandMetadata implements Serializable {
         return band_source;
     }
 
+    public String getUtm() {
+        return utm;
+    }
+
+    public String getBand_resolution() {
+        return band_resolution;
+    }
+
+    public String getBand_name() {
+        return band_name;
+    }
+
+    public Tuple2<Integer, Integer> getPatch_size() {
+        return patch_size;
+    }
+
     public String getLocal_path() {
         return local_path;
     }
@@ -120,15 +152,32 @@ public class BandMetadata implements Serializable {
     public String toString() {
         return
             "utm: " + this.utm + " | " +
-            "resolution: " + this.resolution + " | " +
-            "band_name: " + this.band_name + " | " +
-            "band_path: " + 
this.local_path.substring(this.local_path.lastIndexOf("/")+1) + " :  " +
-            "espg: " + this.espg + " | " +
-            "pixel_resolution: " + this.pixel_resolution + " | " +
+            "resol: " + this.band_resolution + " | " +
+            "bandname: " + this.band_name + " | " +
+            //"band_path: " + 
this.local_path.substring(this.local_path.lastIndexOf("/")+1) + " :  " +
+            //"espg: " + this.espg + " | " +
+            "pixelResol: " + this.pixel_resolution + " | " +
             "ul: " + this.ul + " | " +
             "lr: " + this.lr + " | " +
-            "size: " + this.size
+            "size: " + this.size + " | " +
+            "patchSize: " + this.patch_size + " | " +
+            "RasterBandCt: " + this.band_source.getRasterCount() + " | " +
+            "steps: " + getSteps()
 //            this.projection + "\n"
                 ;
     }
+
+    public String getSteps(){
+
+        /* TODO: Big difference, we are delivering different sizes per 
resolution of the same UTM or l1c image
+         * V delivered only regarding to one
+         *
+         * For UTM products until now generates always 91x91 patches
+        * */
+        Tuple2<Integer, Integer> steps = new Tuple2<>(
+            size.field0 / this.patch_size.field0,
+            size.field1 / this.patch_size.field1
+        ) ;
+        return steps.toString();
+    }
 }
diff --git 
a/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/Patch.java
 
b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/Patch.java
new file mode 100644
index 00000000..588b3f69
--- /dev/null
+++ 
b/wayang-plugins/wayang-agoraeo/src/main/java/org/apache/wayang/agoraeo/patches/Patch.java
@@ -0,0 +1,79 @@
+package org.apache.wayang.agoraeo.patches;
+
+import org.apache.wayang.basic.data.Tuple2;
+
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+
+public class Patch implements Serializable {
+
+    private final String utm;
+    private final String band_resolution;
+    private final String band_name;
+    private final Double ulx;
+    private final Double uly;
+    private final Double lrx;
+    private final Double lry;
+    private final ByteBuffer data;
+    private final Tuple2<Double, Double> pixel_resolution;
+
+    public Patch(String utm, String band_resolution, String band_name, Double 
ulx, Double uly, Double lrx, Double lry, ByteBuffer data, Tuple2<Double, 
Double> pixel_resolution) {
+        this.utm = utm;
+        this.band_resolution = band_resolution;
+        this.band_name = band_name;
+        this.ulx = ulx;
+        this.uly = uly;
+        this.lrx = lrx;
+        this.lry = lry;
+        this.data = data;
+        this.pixel_resolution = pixel_resolution;
+    }
+
+    public Patch(BandMetadata band){
+        this.utm = null;
+        this.band_resolution = null;
+        this.band_name = null;
+        this.ulx = null;
+        this.uly = null;
+        this.lrx = null;
+        this.lry = null;
+        this.data = null;
+        this.pixel_resolution = null;
+    }
+
+    public String getUtm() {
+        return utm;
+    }
+
+    public String getBand_resolution() {
+        return band_resolution;
+    }
+
+    public String getBand_name() {
+        return band_name;
+    }
+
+    public Double getUlx() {
+        return ulx;
+    }
+
+    public Double getUly() {
+        return uly;
+    }
+
+    public Double getLrx() {
+        return lrx;
+    }
+
+    public Double getLry() {
+        return lry;
+    }
+
+    public ByteBuffer getData() {
+        return data;
+    }
+
+    public Tuple2<Double, Double> getPixel_resolution() {
+        return pixel_resolution;
+    }
+}

Reply via email to