You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wayang.apache.org by rp...@apache.org on 2023/02/03 10:10:21 UTC
[incubator-wayang] 04/04: Definitions to extract metadata from Bands
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 <ro...@gmail.com>
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();
}
}