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

commit fc41e92633a1e4b3499ec7ff268f3849651acc1c
Author: rodrigopardomeza <[email protected]>
AuthorDate: Fri Feb 3 11:10:00 2023 +0100

    Definitions to extract metadata from Bands
---
 .../org/apache/wayang/agoraeo/MakePatches.java     |  11 ++-
 .../wayang/agoraeo/patches/BandMetadata.java       | 101 +++++++++++++++++++--
 2 files changed, 99 insertions(+), 13 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 3c3d2111..0a11e3f0 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
@@ -79,7 +79,7 @@ public class MakePatches {
 
         System.out.println("Running Patch Making Process!");
 
-        List<Band> result = new ArrayList<>();
+        List<BandMetadata> result = new ArrayList<>();
         WayangPlan w = createWayangPlan(args[0], result);
 
 
@@ -155,14 +155,14 @@ public class MakePatches {
 
         wayangContext.execute(w, 
ReflectionUtils.getDeclaringJar(MakePatches.class), 
ReflectionUtils.getDeclaringJar(JavaPlatform.class), 
ReflectionUtils.getDeclaringJar(SparkPlatform.class));
 
-        for (Band res : result) {
+        for (BandMetadata res : result) {
             System.out.println(res);
         }
     }
 
     public static WayangPlan createWayangPlan(
             String inputFileUrl,
-            List<Band> result) {
+            List<BandMetadata> result) {
 
         System.out.println(inputFileUrl);
 
@@ -206,7 +206,7 @@ public class MakePatches {
         MapOperator<Band, BandMetadata> metadata = new MapOperator<>(t-> new 
BandMetadata(t), Band.class,BandMetadata.class);
 
 
-        LocalCallbackSink<Band> sink = 
LocalCallbackSink.createCollectingSink(result, Band.class);
+        LocalCallbackSink<BandMetadata> sink = 
LocalCallbackSink.createCollectingSink(result, BandMetadata.class);
 
 
 //        String outputFileUrl = 
"file:///Users/rodrigopardomeza/tu-berlin/agoraeo/agoraeo/outputs/patches.log";
@@ -214,7 +214,8 @@ public class MakePatches {
 
         source.connectTo(0, l2a_catalog,0);
         l2a_catalog.connectTo(0, bands,0);
-        bands.connectTo(0, sink,0);
+        bands.connectTo(0, metadata,0);
+        metadata.connectTo(0, sink,0);
 //        source.connectTo(0,toL2A,0);
 //        toL2A.connectTo(0,sink,0);
 
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 76424ce6..461d14e1 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
@@ -18,16 +18,101 @@
 
 package org.apache.wayang.agoraeo.patches;
 
-public class BandMetadata {
+import org.apache.wayang.basic.data.Tuple2;
+import org.gdal.gdal.*;
+import org.gdal.osr.SpatialReference;
+
+import java.io.Serializable;
+
+public class BandMetadata implements Serializable {
+
+    /*TODO: Band raster is just the first of the bands of the raster, I don't 
know how representative it is*/
+    private org.gdal.gdal.Band band_raster;
+    private org.gdal.gdal.Dataset band_source;
+    private String local_path;
+    private Tuple2<Double, Double> ul;
+    private Tuple2<Double, Double> lr;
+    private Tuple2<Double, Double> pixel_resolution;
+    private Tuple2<Integer, Integer> size;
+
+    private Integer espg;
+    /*
+    * from osgeo.osr import SpatialReference
+
+                epsg = SpatialReference(wkt=src.GetProjection()).GetAttrValue(
+                    "AUTHORITY", 1
+                )
+                if isinstance(epsg, str):
+                    return int(epsg)
+                return -1
+    * */
+
+    private String projection;
 
     public BandMetadata(Band b) {
+        this.band_source = gdal.Open(b.band_path);
+        this.size = new Tuple2<>(this.band_source.GetRasterXSize(), 
this.band_source.getRasterYSize());
+        double[] geo_transf = this.band_source.GetGeoTransform();
+        this.pixel_resolution = new Tuple2<>(geo_transf[1], geo_transf[5]);
+        this.ul = new Tuple2<>(geo_transf[0], geo_transf[3]);
+        this.lr = new Tuple2<>(
+                this.ul.field0 + (this.pixel_resolution.field0 * 
this.size.field0),
+                this.ul.field1 + (this.pixel_resolution.field1 * 
this.size.field1)
+        );
+        this.projection = this.band_source.GetProjection();
+        this.band_raster = this.band_source.GetRasterBand(1);
+        String code_espg = new 
SpatialReference(this.projection).GetAttrValue("AUTHORITY", 1);
+        this.espg = checkCode(code_espg);
+    }
+
+    private Integer checkCode(String code_espg) {
+
+        int intValue;
+
+        if(code_espg == null || code_espg.equals("")) {
+//            System.out.println("String cannot be parsed, it is null or 
empty.");
+            return -1;
+        }
+
+        try {
+            intValue = Integer.parseInt(code_espg);
+            return intValue;
+        } catch (NumberFormatException e) {
+//            System.out.println("Input String cannot be parsed to Integer.");
+        }
+        return -1;
+    }
+
+    public org.gdal.gdal.Band getBand_raster() {
+        return band_raster;
+    }
+
+    public Dataset getBand_source() {
+        return band_source;
+    }
+
+    public String getLocal_path() {
+        return local_path;
+    }
+
+    public Tuple2<Double, Double> getUl() {
+        return ul;
+    }
+
+    public Tuple2<Double, Double> getLr() {
+        return lr;
+    }
+
+    public Tuple2<Double, Double> getPixel_resolution() {
+        return pixel_resolution;
+    }
+
+    public Tuple2<Integer, Integer> getSize() {
+        return size;
+    }
 
-//         band_raster
-//                band_source=source,
-//                local_path=local_path,
-//                ul=(ulx, uly),
-//        lr=(lrx, lry),
-//        resolution=resolution,
-//                size=size,
+    @Override
+    public String toString() {
+        return this.band_source.GetProjection();
     }
 }

Reply via email to