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