Revision 1055 org.gvsig.geoprocess/branches/refactor-2018/org.gvsig.geoprocess/org.gvsig.geoprocess.lib/org.gvsig.geoprocess.lib.sextante/src/main/java/org/gvsig/geoprocess/lib/sextante/dataObjects/RasterDriver.java
RasterDriver.java | ||
---|---|---|
23 | 23 |
*/ |
24 | 24 |
package org.gvsig.geoprocess.lib.sextante.dataObjects; |
25 | 25 |
|
26 |
import java.awt.geom.AffineTransform; |
|
27 | 26 |
import java.awt.image.DataBuffer; |
28 | 27 |
import java.io.File; |
29 | 28 |
|
... | ... | |
33 | 32 |
import org.cresques.cts.IProjection; |
34 | 33 |
|
35 | 34 |
import org.gvsig.andami.Utilities; |
36 |
import org.gvsig.fmap.dal.coverage.RasterLocator; |
|
37 |
import org.gvsig.fmap.dal.coverage.RasterManager; |
|
38 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
|
39 |
import org.gvsig.fmap.dal.coverage.datastruct.NoData; |
|
40 |
import org.gvsig.fmap.dal.coverage.datastruct.Params; |
|
41 |
import org.gvsig.fmap.dal.coverage.store.DataServerWriter; |
|
42 |
import org.gvsig.fmap.dal.coverage.store.RasterWriter; |
|
35 |
import org.gvsig.fmap.dal.DALLocator; |
|
36 |
import org.gvsig.fmap.dal.DataManager; |
|
37 |
import org.gvsig.fmap.dal.DataServerExplorerParameters; |
|
38 |
import org.gvsig.fmap.dal.raster.api.NewRasterStoreParameters; |
|
39 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer; |
|
40 |
import org.gvsig.raster.lib.buffer.api.Buffer; |
|
41 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
|
42 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
|
43 |
import org.gvsig.raster.lib.buffer.api.NoData; |
|
44 |
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException; |
|
43 | 45 |
|
46 |
|
|
44 | 47 |
public class RasterDriver { |
45 | 48 |
|
46 | 49 |
public static final int RASTER_DATA_TYPE_FLOAT = DataBuffer.TYPE_FLOAT; |
... | ... | |
54 | 57 |
private String name = null; |
55 | 58 |
|
56 | 59 |
public RasterDriver(final AnalysisExtent ae, final int iDataType, |
57 |
final int iNumBands) { |
|
60 |
final int iNumBands) throws BufferException {
|
|
58 | 61 |
|
59 | 62 |
super(); |
60 |
|
|
61 |
buf = |
|
62 |
RasterLocator.getManager().createBuffer(iDataType, |
|
63 |
ae.getNX(), |
|
64 |
ae.getNY(), |
|
65 |
iNumBands, true); |
|
63 |
IProjection projection = null; //TODO check create bufefr without projection |
|
64 |
int[] listDataType; //TODO check how listDataType is made. |
|
65 |
listDataType = new int[1]; |
|
66 |
listDataType[0] = (iDataType); |
|
67 |
buf = BufferLocator.getBufferManager().createBuffer(ae.getNX(), ae.getNY(), listDataType, projection); |
|
66 | 68 |
m_GridExtent = ae; |
67 | 69 |
|
68 | 70 |
} |
69 | 71 |
|
70 |
public RasterDriver(final AnalysisExtent ae, final int iDataType) { |
|
72 |
public RasterDriver(final AnalysisExtent ae, final int iDataType) throws BufferException {
|
|
71 | 73 |
this(ae, iDataType, 1); |
72 | 74 |
} |
73 | 75 |
|
... | ... | |
99 | 101 |
final double dValue) { |
100 | 102 |
|
101 | 103 |
if (isInGrid(x, y) && (iBand < buf.getBandCount())) { |
102 |
switch (buf.getDataType()) { |
|
103 |
case Buffer.TYPE_BYTE: |
|
104 |
buf.setElem(y, x, iBand, (byte) dValue);
|
|
104 |
switch (buf.getBand(iBand).getDataType()) {
|
|
105 |
case BufferManager.TYPE_BYTE:
|
|
106 |
buf.getBand(iBand).set(y,x, (byte) dValue);
|
|
105 | 107 |
break; |
106 |
case Buffer.TYPE_SHORT: |
|
107 |
buf.setElem(y, x, iBand, (short) dValue);
|
|
108 |
case BufferManager.TYPE_SHORT:
|
|
109 |
buf.getBand(iBand).set(y, x,(short) dValue);
|
|
108 | 110 |
break; |
109 |
case Buffer.TYPE_INT: |
|
110 |
buf.setElem(y, x, iBand, (int) dValue);
|
|
111 |
case BufferManager.TYPE_INT:
|
|
112 |
buf.getBand(iBand).set(y, x, (int) dValue);
|
|
111 | 113 |
break; |
112 |
case Buffer.TYPE_FLOAT: |
|
113 |
buf.setElem(y, x, iBand, (float) dValue);
|
|
114 |
case BufferManager.TYPE_FLOAT:
|
|
115 |
buf.getBand(iBand).set(y, x,(float) dValue);
|
|
114 | 116 |
break; |
115 |
case Buffer.TYPE_DOUBLE: |
|
117 |
case BufferManager.TYPE_DOUBLE:
|
|
116 | 118 |
default: |
117 |
buf.setElem(y, x, iBand, dValue);
|
|
119 |
buf.getBand(iBand).set(y, x, dValue);
|
|
118 | 120 |
break; |
119 | 121 |
} |
120 | 122 |
} |
121 | 123 |
} |
122 | 124 |
|
123 | 125 |
public double getNoDataValue() { |
124 |
NoData nodata = buf.getNoDataValue(); |
|
126 |
NoData nodata; |
|
127 |
nodata = buf.getBandNoData()[0]; |
|
125 | 128 |
return nodata != null ? (nodata.getValue() != null ? nodata.getValue() |
126 | 129 |
.doubleValue() : 0.0d) : 0.0d; |
127 | 130 |
} |
128 | 131 |
|
129 | 132 |
public void setNoDataValue(final double dNoDataValue) { |
130 | 133 |
// TODO: hablar con NACHO |
131 |
if (buf.getNoDataValue() == null) {
|
|
132 |
NoData nodata =
|
|
133 |
RasterLocator.getManager().getDataStructFactory()
|
|
134 |
.createNoData(dNoDataValue, null, null);
|
|
135 |
buf.setNoDataValue(nodata);
|
|
136 |
} else {
|
|
137 |
buf.getNoDataValue().setValue(dNoDataValue);
|
|
134 |
for (int i = 0; i < buf.getBandCount(); i++) {
|
|
135 |
if (buf.getBand(i).getNoData()== null) {
|
|
136 |
NoData nodata = BufferLocator.getBufferManager().createNoData(dNoDataValue, null);
|
|
137 |
buf.getBand(i).getNoData().setValue(nodata.getValue());
|
|
138 |
} else {
|
|
139 |
buf.getBand(i).getNoData().setValue(dNoDataValue);
|
|
140 |
}
|
|
138 | 141 |
} |
139 | 142 |
} |
140 | 143 |
|
... | ... | |
145 | 148 |
public double getCellValue(final int x, final int y, final int iBand) { |
146 | 149 |
|
147 | 150 |
if (isInGrid(x, y) && (iBand < buf.getBandCount())) { |
148 |
switch (buf.getDataType()) { |
|
149 |
case Buffer.TYPE_BYTE: |
|
150 |
return buf.getElemByte(y, x, iBand);
|
|
151 |
case Buffer.TYPE_SHORT: |
|
152 |
return buf.getElemShort(y, x, iBand);
|
|
153 |
case Buffer.TYPE_INT: |
|
154 |
return buf.getElemInt(y, x, iBand);
|
|
155 |
case Buffer.TYPE_FLOAT: |
|
156 |
return buf.getElemFloat(y, x, iBand);
|
|
157 |
case Buffer.TYPE_DOUBLE: |
|
158 |
return buf.getElemDouble(y, x, iBand);
|
|
151 |
switch (buf.getBand(iBand).getDataType()) {
|
|
152 |
case BufferManager.TYPE_BYTE:
|
|
153 |
return buf.getBandByte(iBand).getValue(y, x);
|
|
154 |
case BufferManager.TYPE_SHORT:
|
|
155 |
return buf.getBandShort(iBand).getValue(y, x);
|
|
156 |
case BufferManager.TYPE_INT:
|
|
157 |
return buf.getBandInt(iBand).getValue(y,x);
|
|
158 |
case BufferManager.TYPE_FLOAT:
|
|
159 |
return buf.getBandFloat(iBand).getValue(y,x);
|
|
160 |
case BufferManager.TYPE_DOUBLE:
|
|
161 |
return buf.getBandDouble(iBand).getValue(y,x);
|
|
159 | 162 |
default: |
160 | 163 |
return getNoDataValue(); |
161 | 164 |
} |
... | ... | |
174 | 177 |
if ((x < 0) || (y < 0)) { |
175 | 178 |
return false; |
176 | 179 |
} |
177 |
|
|
180 |
|
|
178 | 181 |
if ((x >= m_GridExtent.getNX()) || (y >= m_GridExtent.getNY())) { |
179 | 182 |
return false; |
180 | 183 |
} |
... | ... | |
220 | 223 |
|
221 | 224 |
public boolean export(final String sFilename, final IProjection projection) { |
222 | 225 |
|
223 |
try { |
|
224 |
RasterManager manager = RasterLocator.getManager(); |
|
225 |
final DataServerWriter writerBufferServer = |
|
226 |
manager.createDataServerWriter(); |
|
227 |
writerBufferServer.setBuffer(buf, -1); |
|
228 |
final Params params = manager.createWriterParams(sFilename); |
|
229 |
final AffineTransform affineTransform = |
|
230 |
new AffineTransform(m_GridExtent.getCellSize(), 0, 0, |
|
231 |
-m_GridExtent.getCellSize(), m_GridExtent.getXMin(), |
|
232 |
m_GridExtent.getYMax()); |
|
233 | 226 |
|
234 |
final RasterWriter writer = |
|
235 |
manager.createWriter(writerBufferServer, sFilename, |
|
236 |
buf.getBandCount(), affineTransform, buf.getWidth(), |
|
237 |
buf.getHeight(), buf.getDataType(), params, projection); |
|
238 |
writer.dataWrite(); |
|
239 |
writer.writeClose(); |
|
240 |
|
|
241 |
} catch (final Exception e) { |
|
227 |
try { |
|
228 |
final DataManager dm = DALLocator.getDataManager(); |
|
229 |
DataServerExplorerParameters serverParameters = dm.createServerExplorerParameters(FilesystemServerExplorer.NAME); |
|
230 |
FilesystemServerExplorer server = (FilesystemServerExplorer) dm.openServerExplorer(FilesystemServerExplorer.NAME, serverParameters); |
|
231 |
File file = new File(sFilename); |
|
232 |
NewRasterStoreParameters parameters = (NewRasterStoreParameters) server.getAddParameters(file); |
|
233 |
parameters.setDynValue("crs", projection); |
|
234 |
parameters.setBuffer(buf); |
|
235 |
server.add(parameters.getDataStoreName(), parameters, true); |
|
236 |
|
|
237 |
return true; |
|
238 |
} catch (Exception e) { |
|
242 | 239 |
Sextante.addErrorToLog(e); |
243 |
return false; |
|
244 | 240 |
} |
245 |
|
|
246 |
return true; |
|
247 |
|
|
241 |
return false; |
|
248 | 242 |
} |
249 | 243 |
|
250 | 244 |
public void setName(final String name) { |
Also available in: Unified diff