Revision 504

View differences:

2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/data/GvSIGLayerDataRaster.java
27 27
import gov.nasa.worldwind.WWObjectImpl;
28 28
import gov.nasa.worldwind.avlist.AVKey;
29 29
import gov.nasa.worldwind.avlist.AVList;
30
import gov.nasa.worldwind.data.BufferWrapperRaster;
31 30
import gov.nasa.worldwind.data.BufferedImageRaster;
31
import gov.nasa.worldwind.data.ByteBufferRaster;
32 32
import gov.nasa.worldwind.data.DataRaster;
33 33
import gov.nasa.worldwind.geom.Sector;
34
import gov.nasa.worldwind.util.BufferWrapper;
35 34

  
36 35
import java.awt.Dimension;
37 36
import java.awt.Graphics2D;
......
39 38
import java.awt.geom.AffineTransform;
40 39
import java.awt.geom.Point2D;
41 40
import java.awt.image.BufferedImage;
42
import java.nio.ByteBuffer;
43 41

  
44 42
import org.cresques.cts.ICoordTrans;
45 43
import org.cresques.cts.IProjection;
......
162 160
                clipRect.height });
163 161

  
164 162
        RasterQuery query = RasterLocator.getManager().createQuery();
165
        query.setSupersamplingOption(false);
163
        query.setSupersamplingOption(true);
166 164
        query.setDrawableBands(new int[] { 0 });
167 165
        query.setReadOnly(true);
168
        query.setAreaOfInterest(clipRect);
166
        query.setAreaOfInterest(clipRect, canvas.getWidth(), canvas.getHeight());
169 167

  
170 168
        Buffer buffer = null;
171 169
        try {
......
179 177
                query.toString(), rasterLayer.getDataStore().getName() }, e);
180 178
            return;
181 179
        }
182

  
180
        
181
        ByteBufferRaster byteBuferRaster =
182
            new ByteBufferRaster(canvas.getWidth(), canvas.getHeight(),
183
                overlap, this.copy());
184
        
183 185
        // Create buffer depending on data type
184 186
        String dataType = (String) this.getValue(AVKey.DATA_TYPE);
185
        int bytesNumber = getBytesNumber(dataType);
186
        ByteBuffer byteBuffer =
187
            ByteBuffer.allocate(buffer.getWidth() * buffer.getHeight()
188
                * bytesNumber);
189

  
190
        LOG.debug("Start iterator buffer");
191
        long startTime = System.currentTimeMillis();
187
        
192 188
        for (int i = 0; i < buffer.getHeight(); i++) {
193
            for (int j = 0; j < buffer.getWidth(); j++) {
194
                if (AVKey.INT8.equals(dataType)) {
195
                    byte elemByte = buffer.getElemByte(i, j, 0);
196
                    byteBuffer.put(elemByte);
197
                } else if (AVKey.INT16.equals(dataType)) {
198
                    short elemShort = buffer.getElemShort(i, j, 0);
199
                    byteBuffer.putShort(elemShort);
200
                } else if (AVKey.INT32.equals(dataType)) {
201
                    int elemInteger = buffer.getElemInt(i, j, 0);
202
                    byteBuffer.putInt(elemInteger);
203
                } else if (AVKey.FLOAT32.equals(dataType)) {
204
                    float elemFloat = buffer.getElemFloat(i, j, 0);
205
                    byteBuffer.putFloat(elemFloat);
206
                } else if (AVKey.FLOAT64.equals(dataType)) {
207
                    double elemDouble = buffer.getElemDouble(i, j, 0);
208
                    byteBuffer.putDouble(elemDouble);
209
                }
189
            if (AVKey.INT8.equals(dataType)) {
190
                byte[] byteValues = buffer.getLineFromBandByte(i, 0);
191
                setLineByteToDataRaster(byteBuferRaster, i, byteValues);
192
            } else if (AVKey.INT16.equals(dataType)) {
193
                short[] shortValues = buffer.getLineFromBandShort(i, 0);
194
                setLineShortToDataRaster(byteBuferRaster, i, shortValues);
195
            } else if (AVKey.INT32.equals(dataType)) {
196
                int[] intValues = buffer.getLineFromBandInt(i, 0);
197
                setLineIntToDataRaster(byteBuferRaster, i, intValues);
198
            } else if (AVKey.FLOAT32.equals(dataType)) {
199
                float[] floatValues = buffer.getLineFromBandFloat(i, 0);
200
                setLineFloatToDataRaster(byteBuferRaster, i, floatValues);
201
            } else if (AVKey.FLOAT64.equals(dataType)) {
202
                double[] doubleValues = buffer.getLineFromBandDouble(i, 0);
203
                setLineDoubleToDataRaster(byteBuferRaster, i, doubleValues);
210 204
            }
211 205
        }
212
        LOG.debug("Finish iterator buffer. Time {}", System.currentTimeMillis()
213
            - startTime);
206
        byteBuferRaster.drawOnTo(canvas);
207
    }
214 208

  
215
        byteBuffer.position(0);
209
    private void setLineByteToDataRaster(ByteBufferRaster byteBuferRaster, int i,
210
        byte[] byteValues) {
211
        for (int j = 0; j < byteValues.length; j++) {
212
            Number value = byteValues[j];
213
            byteBuferRaster.setDoubleAtPosition(i, j, value.doubleValue());
214
        }
215
    }
216 216

  
217
        BufferWrapper wrap = BufferWrapper.wrap(byteBuffer, this.copy());
217
    private void setLineShortToDataRaster(ByteBufferRaster byteBuferRaster,
218
        int i, short[] shortValues) {
219
        for (int j = 0; j < shortValues.length; j++) {
220
            Number value = shortValues[j];
221
            byteBuferRaster.setDoubleAtPosition(i, j, value.doubleValue());
222
        }
223
    }
218 224

  
219
        BufferWrapperRaster bufferWrapper =
220
            new BufferWrapperRaster(buffer.getWidth(), buffer.getHeight(),
221
                overlap, wrap, this.copy());
222
        bufferWrapper.drawOnTo(canvas);
225
    private void setLineIntToDataRaster(ByteBufferRaster byteBuferRaster,
226
        int i, int[] intValues) {
227
        for (int j = 0; j < intValues.length; j++) {
228
            Number value = intValues[j];
229
            byteBuferRaster.setDoubleAtPosition(i, j, value.doubleValue());
230
        }
223 231
    }
224 232

  
225
    private void drawVectElevationOnTo(DataRaster canvas) {
226
        // TODO Auto-generated method stub
233
    private void setLineFloatToDataRaster(ByteBufferRaster byteBuferRaster,
234
        int i, float[] floatValues) {
235
        for (int j = 0; j < floatValues.length; j++) {
236
            Number value = floatValues[j];
237
            byteBuferRaster.setDoubleAtPosition(i, j, value.doubleValue());
238
        }
239
    }
227 240

  
241
    private void setLineDoubleToDataRaster(ByteBufferRaster byteBuferRaster,
242
        int i, double[] doubleValues) {
243
        for (int j = 0; j < doubleValues.length; j++) {
244
            Number value = doubleValues[j];
245
            byteBuferRaster.setDoubleAtPosition(i, j, value.doubleValue());
246
        }
228 247
    }
229 248

  
230
    private int getBytesNumber(String dataType) {
249
    private void drawVectElevationOnTo(DataRaster canvas) {
250
        // TODO Auto-generated method stub
231 251

  
232
        if (AVKey.INT8.equals(dataType)) {
233
            return 1;
234
        } else if (AVKey.INT16.equals(dataType)) {
235
            return 2;
236
        } else if (AVKey.INT32.equals(dataType)
237
            || AVKey.FLOAT32.equals(dataType)) {
238
            return 4;
239
        } else if (AVKey.FLOAT64.equals(dataType)) {
240
            return 8;
241
        }
242

  
243
        return 1;
244 252
    }
245 253

  
246 254
    private void drawImageOnTo(DataRaster canvas) {
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/data/DefaultLayerConverter.java
271 271
        params.setValue(AVKey.IMAGE_FORMAT, "application/bil32");
272 272
        params.setValue(AVKey.MISSING_DATA_SIGNAL, layerProperties.getNoDataValue());
273 273
        params.setValue(AVKey.ELEVATION_UNIT, layerProperties.getElevationUnits());
274
        params.setValue(AVKey.BYTE_ORDER, AVKey.BIG_ENDIAN);
274
        params.setValue(AVKey.BYTE_ORDER, AVKey.LITTLE_ENDIAN);
275 275
        params.setValue(AVKey.AVAILABLE_IMAGE_FORMATS, new String[] { params
276 276
            .getValue(AVKey.IMAGE_FORMAT).toString() });
277 277
            

Also available in: Unified diff