From ae6d9d329b86c14319d944f9c938f36b59da1c5e Mon Sep 17 00:00:00 2001 From: Gianpaolo Coro Date: Fri, 17 Feb 2017 16:27:10 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/EcologicalEngineGeoSpatialExtension@142717 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../dataanalysis/geo/utils/CSV2ESRIGRID.java | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/main/java/org/gcube/dataanalysis/geo/utils/CSV2ESRIGRID.java diff --git a/src/main/java/org/gcube/dataanalysis/geo/utils/CSV2ESRIGRID.java b/src/main/java/org/gcube/dataanalysis/geo/utils/CSV2ESRIGRID.java new file mode 100644 index 0000000..70be348 --- /dev/null +++ b/src/main/java/org/gcube/dataanalysis/geo/utils/CSV2ESRIGRID.java @@ -0,0 +1,119 @@ +package org.gcube.dataanalysis.geo.utils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.List; + +import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; +import org.gcube.dataanalysis.ecoengine.configuration.AlgorithmConfiguration; +import org.gcube.dataanalysis.ecoengine.utils.Transformations; +import org.gcube.dataanalysis.geo.connectors.asc.AscRaster; +import org.gcube.dataanalysis.geo.connectors.asc.AscRasterWriter; + +public class CSV2ESRIGRID { + + public static void main(String [] args) throws Exception{ + String inputFolder = "C:\\Users\\coro\\Desktop\\DatabaseBackup\\HCAFs\\"; + String inputFile = new File(inputFolder,"hcaf_d - TEST.csv").getAbsolutePath(); + + + double resolution = 0.5; + String latColumn = "centerlat"; + String longColumn = "centerlong"; + String [] paramColumns = {"depthmin","depthmax","depthmean","depthsd","sstanmean","sstansd","sstmnmax", + "sstmnmin","sstmnrange","sbtanmean","salinitymean","salinitysd","salinitymax","salinitymin","salinitybmean", + "primprodmean","iceconann","oceanarea"}; + + for (String paramColumn:paramColumns){ + String outputFile =new File(inputFolder,"hcaf_"+paramColumn+".asc").getAbsolutePath(); + AnalysisLogger.setLogger("./cfg/"+AlgorithmConfiguration.defaultLoggerFile); + toESRI(inputFile, outputFile, resolution, latColumn, longColumn, paramColumn); + } + } + + public static void toESRI(String inputFile, String outputFile, double resolution,String latcolumn,String longcolumn,String paramcolumn) throws Exception{ + + float BBxLLf = -180; + float BBxURf= 180; + float BByLLf = -90; + float BByURf = 90; + + try { + long t0 = System.currentTimeMillis(); + + AnalysisLogger.getLogger().debug("toESRI->Building raster object for "+paramcolumn); + AnalysisLogger.getLogger().debug("toESRI->Building raster object to "+outputFile); + + BufferedReader br = new BufferedReader(new FileReader(new File(inputFile))); + + String line = br.readLine(); + String delimiter = ","; + + List lineElems=Transformations.parseCVSString(line, delimiter); + int latColIdx = 0; + int longColIdx = 0; + int valColIdx = 0; + int k=0; + for (String elem:lineElems){ + if (elem.equalsIgnoreCase(latcolumn)) + latColIdx=k; + if (elem.equalsIgnoreCase(longcolumn)) + longColIdx=k; + if (elem.equalsIgnoreCase(paramcolumn)) + valColIdx=k; + k++; + } + + AnalysisLogger.getLogger().debug("toESRI->Lat column index "+latColIdx); + AnalysisLogger.getLogger().debug("toESRI->Long column index "+longColIdx); + AnalysisLogger.getLogger().debug("toESRI->Parameter column index "+valColIdx); + + line = br.readLine(); + + int ncols = (int)Math.round((BBxURf-BBxLLf)/resolution); + int nrows = (int) Math.round((BByURf-BByLLf)/resolution); + AnalysisLogger.getLogger().debug("toESRI->Matrix size "+nrows +"X"+ncols); + + double [][] data = new double[nrows][ncols]; + AscRaster raster = new AscRaster(data,resolution,-1,-1,BBxLLf,BByLLf); + + while (line!=null){ + lineElems=Transformations.parseCVSString(line, delimiter); + float longitude = Float.parseFloat(lineElems.get(longColIdx)); + float latitude = Float.parseFloat(lineElems.get(latColIdx)); + float value = -9999; + try{ + value = Float.parseFloat(lineElems.get(valColIdx));} + catch(Exception e){ +// AnalysisLogger.getLogger().debug("toESRI->Wrong value "+e.getLocalizedMessage()); + } + + int lonidx = Math.max(0,raster.longitude2Index(longitude)); + int latidx = Math.max(0,raster.latitude2Index(latitude)); + if (longitude==10.75 && latitude==43.75) + AnalysisLogger.getLogger().debug("toESRI->"+longitude+","+latitude+","+value+"->"+lonidx+","+latidx); + raster.setValue(latidx,lonidx,value); + line = br.readLine(); + } + + File outputfile = new File(outputFile); + AnalysisLogger.getLogger().debug("toESRI->Writing raster file " + outputfile.getAbsolutePath()); + AscRasterWriter writer = new AscRasterWriter(); + writer.writeRaster(outputfile.getAbsolutePath(), raster); + AnalysisLogger.getLogger().debug("toESRI->Elapsed: Whole operation completed in " + ((double) (System.currentTimeMillis() - t0) / 1000d) + "s"); + + br.close(); + } catch (Exception e) { + e.printStackTrace(); + AnalysisLogger.getLogger().debug("toESRI->ERROR!: " + e.getLocalizedMessage()); + throw e; + } finally { + + } + } + + + + +}