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;
+ }
+}