Gianpaolo Coro 2017-02-17 16:27:10 +00:00
parent 1a2126742f
commit ae6d9d329b
1 changed files with 119 additions and 0 deletions

View File

@ -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<String> 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 {
}
}
}