git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/EcologicalEngineGeoSpatialExtension@142717 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
1a2126742f
commit
ae6d9d329b
|
@ -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 {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue