Hi all,
Recently I worked a bit with Sextante/grids and did some specialized short
courses. A student of mine used OpenJUMP/Sextante to do some analysis. Than
he had to convert all the rasters (TIFF format) into ESRI Ascii grid files
(.asc) as he had to use a more specialized software that was accepting only
asc. and surfer raster format.
Of coarse we used gdal for raster transformation.
Well, since Esri ascii file is a very simple text file (
http://en.wikipedia.org/wiki/Esri_grid), in these days ( that I have spare
time) I tried to make a plugin "Export raster to Esri Ascii grid file" for
OpenJUMP (that in turn I would like to add to OJ NB). All raster parameters
are easy implemented by RasterImageLayer and OpenJUMPSextanteRasterLayer.
I had some success and some failures.
I ask your help, as developers.
I added to this mail the code I wrote (coping partially OJ raster classes
and from other software like ImageJ) - The foillowing code just shows the
transformation, excluding initialize(), icon(), name(), etc.
This code partially works: the file is saved together with the header of
the raster (see the *black* part of the code, number of colums, rows,
x-ycoordinates of upper left corner, cell size and NODATA),
The red part of code is not working. This part should lists the raster
values for each cell, starting at the upper-left corner, possibly with
decimal values, delimited by space character. I ask you if can give me a
suggestion for this part.
Another part that I would like to implement is the MultienableCheck (dark *
violet *part of the code). This plugin should be activated only if the
raster has only one band (I think this is numbered "0" by
OpenJUMPSextanteRasterLayer class). Any suggestion is accepted: a way to
distinguish (within Pirol raster plugin) between grid mono band file and
others would be quite usefull for future plugins
If this plugin is finished I think I will add to OJ NB under Raster>Tools
menu.
regards and thanks
Peppe
public class SaveToASCPlugIn extends AbstractPlugIn
{
protected double[][] data;
private Properties properties = null;
private static String propertiesFile =
LoadSextanteRasterImagePlugIn.getPropertiesFile();
private String lastPath;
NumberFormat cellFormat = null;
public static final String DEFAULT_NODATA = "-9999";
public boolean execute(PlugInContext context)
throws Exception
{
JFileChooser fc = new JFCWithEnterAction();
fc.setFileFilter(new FileFilter() {
public boolean accept(File f) {
return (f.isDirectory()) ||
(f.getName().toLowerCase().endsWith(".asc"));
}
public String getDescription() {
return "Arc/Info ASCII Grid (.asc)";
}
});
this.properties = new Properties();
try {
FileInputStream fis = new FileInputStream(propertiesFile);
this.properties.load(fis);
this.lastPath =
this.properties.getProperty(LoadSextanteRasterImagePlugIn.KEY_PATH);
fis.close();
}
catch (FileNotFoundException e) {
context.getWorkbenchFrame().warnUser(I18N.get("org.openjump.core.ui.plugin.layer.pirolraster.SaveRasterImageAsImagePlugIn.File-not-found"));
}
catch (IOException e) {
context.getWorkbenchFrame().warnUser(GenericNames.ERROR);
}
if (this.lastPath != null) {
fc.setCurrentDirectory(new File(this.lastPath));
}
fc.setMultiSelectionEnabled(false);
fc.setDialogTitle(getName());
int returnVal = fc.showSaveDialog(fc);
if (returnVal == 0) {
String ascFileName = fc.getSelectedFile().getAbsolutePath();
if (!ascFileName.toLowerCase().endsWith(".asc".toLowerCase())) {
ascFileName = ascFileName + ".asc";
}
File ascFile = new File(ascFileName);
FileOutputStream ascOut = new FileOutputStream(ascFile);
RasterImageLayer rLayer =
(RasterImageLayer)LayerTools.getSelectedLayerable(context,
RasterImageLayer.class);
OpenJUMPSextanteRasterLayer rstLayer = new
OpenJUMPSextanteRasterLayer();
rstLayer.create(rLayer);
* PrintStream o = new PrintStream(ascOut);*
* o.println( "ncols " + rLayer.getOrigImageWidth() );
//rstLayer.getNX() );
o.println( "nrows " + rLayer.getOrigImageHeight() );
//rstLayer.getNY() );
o.println( "xllcorner " + rLayer.getEnvelope().getMinX() );
o.println( "yllcorner " + rLayer.getEnvelope().getMinY());
o.println( "cellsize " + rstLayer.getLayerCellSize() );
o.println( "NODATA_value " + DEFAULT_NODATA );*
GridWrapperNotInterpolated gwrapper = new
GridWrapperNotInterpolated(rstLayer, rstLayer.getLayerGridExtent());
int nx = rstLayer.getLayerGridExtent().getNX();
int ny = rstLayer.getLayerGridExtent().getNY();
for (int x = 0; x < nx; x++) {//cols
for (int y = 0; y < ny; y++) {//rows
double value = gwrapper.getCellValueAsFloat(x, y, 0);
StringBuffer b = new StringBuffer();
for( int i = 0; i < rLayer.getOrigImageWidth(); i++ )
{
if( Double.isNaN(rstLayer.getNoDataValue() ) )
b.append( rstLayer.getNoDataValue() );
else if( cellFormat != null ) b.append(
cellFormat.format( value ));
else b.append( cellFormat.format( value ) );
if( i < rLayer.getOrigImageWidth() -1 ) b.append(
" " );
}
o.println( b );
}
}
o.close();
rLayer.setImageFileName(ascFileName);
rLayer.setNeedToKeepImage(false);
}
return true;
}
public void setCellFormat( NumberFormat format )
{
cellFormat = format;
}
* public static MultiEnableCheck createEnableCheck(WorkbenchContext
workbenchContext)
{
EnableCheckFactory checkFactory = new EnableCheckFactory(
workbenchContext);
MultiEnableCheck multiEnableCheck = new MultiEnableCheck();
multiEnableCheck.add(checkFactory.createExactlyNLayerablesMustBeSelectedCheck(1,
RasterImageLayer.class));
return multiEnableCheck;*
}
}
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel