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) {
|