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(); } }
