Revision 26395 branches/v10/libraries/libDielmoOpenLidar/src/com/dielmo/lidar/LASPoint12F3.java
LASPoint12F3.java | ||
---|---|---|
50 | 50 |
package com.dielmo.lidar; |
51 | 51 |
|
52 | 52 |
import java.nio.ByteBuffer; |
53 |
import java.sql.Types; |
|
54 | 53 |
|
55 |
import com.hardcode.gdbms.engine.values.DoubleValue; |
|
56 |
import com.hardcode.gdbms.engine.values.IntValue; |
|
57 |
import com.hardcode.gdbms.engine.values.Value; |
|
58 |
import com.hardcode.gdbms.engine.values.ValueFactory; |
|
59 |
import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
|
60 |
import com.iver.utiles.bigfile.BigByteBuffer2; |
|
54 |
import com.dielmo.lidar.fieldsDescription.ColumnDescription; |
|
55 |
import com.dielmo.lidar.fieldsDescription.ContainerColumnDescription; |
|
61 | 56 |
|
62 | 57 |
|
63 | 58 |
/** |
... | ... | |
250 | 245 |
* 13 return userData |
251 | 246 |
* 14 return pointSourceID |
252 | 247 |
* 15 return Time GPS |
248 |
* 16 return R |
|
249 |
* 17 return G |
|
250 |
* 18 return B |
|
253 | 251 |
* |
254 | 252 |
* @param bb byte buffer of data |
255 | 253 |
* @param indexField index of field |
256 | 254 |
* @param hdr LiDAR header |
257 | 255 |
* @param index asked point index. (row) |
258 |
* @return Value of row and column indicated
|
|
256 |
* @return Object of row and column indicated
|
|
259 | 257 |
*/ |
260 |
public Value getFieldValueByIndex(BigByteBuffer2 bb, int indexField,
|
|
258 |
public Object getFieldValueByIndex(BigByteBuffer2 bb, int indexField,
|
|
261 | 259 |
LidarHeader hdr, long index) { |
262 | 260 |
|
263 |
readPoint(bb, hdr, index); |
|
264 |
|
|
265 |
switch(indexField) { |
|
266 |
|
|
267 |
case 0: |
|
268 |
return ValueFactory.createValue(getX()*hdr.getXScale()+hdr.getXOffset()); |
|
269 |
|
|
270 |
case 1: |
|
271 |
return ValueFactory.createValue(getY()*hdr.getYScale()+hdr.getYOffset()); |
|
272 |
|
|
273 |
case 2: |
|
274 |
return ValueFactory.createValue(getZ()*hdr.getZScale()+hdr.getZOffset()); |
|
275 |
|
|
276 |
case 3: |
|
277 |
return ValueFactory.createValue(getIntensity()); |
|
278 |
|
|
279 |
case 4: |
|
280 |
return ValueFactory.createValue(getReturnNumber()); |
|
281 |
|
|
282 |
case 5: |
|
283 |
return ValueFactory.createValue(getNumberOfReturn()); |
|
284 |
|
|
285 |
case 6: |
|
286 |
return ValueFactory.createValue(getScanDirectionFlag()); |
|
287 |
|
|
288 |
case 7: |
|
289 |
return ValueFactory.createValue(getEdgeOfFlightLine()); |
|
290 |
|
|
291 |
case 8: |
|
292 |
return ValueFactory.createValue(getClassification()); |
|
293 |
|
|
294 |
case 9: |
|
295 |
return ValueFactory.createValue(getSynthetic()); |
|
296 |
|
|
297 |
case 10: |
|
298 |
return ValueFactory.createValue(getKeyPoint()); |
|
299 |
|
|
300 |
case 11: |
|
301 |
return ValueFactory.createValue(getWithheld()); |
|
302 |
|
|
303 |
case 12: |
|
304 |
return ValueFactory.createValue(getScanAngleRank()); |
|
305 |
|
|
306 |
case 13: |
|
307 |
return ValueFactory.createValue(getUserData()); |
|
308 |
|
|
309 |
case 14: |
|
310 |
return ValueFactory.createValue(getPointSourceID()); |
|
311 |
|
|
312 |
case 15: |
|
313 |
return ValueFactory.createValue(getTimeGPS()); |
|
314 |
|
|
315 |
case 16: |
|
316 |
return ValueFactory.createValue(getRed()); |
|
317 |
|
|
318 |
case 17: |
|
319 |
return ValueFactory.createValue(getGreen()); |
|
320 |
|
|
321 |
case 18: |
|
322 |
return ValueFactory.createValue(getBlue()); |
|
261 |
if (indexField >= 15) { |
|
262 |
readPoint(bb, hdr, index); |
|
263 |
if(indexField == 15) |
|
264 |
return getTimeGPS(); |
|
265 |
if(indexField == 16) |
|
266 |
return getRed(); |
|
267 |
else if(indexField == 17) |
|
268 |
return getGreen(); |
|
269 |
else if(indexField == 18) |
|
270 |
return getBlue(); |
|
323 | 271 |
} |
324 |
|
|
325 |
return null; |
|
272 |
return super.getFieldValueByIndex(bb, indexField, hdr, index); |
|
326 | 273 |
} |
327 | 274 |
|
328 |
public Value getFieldValueByName(BigByteBuffer2 bb, String nameField, LidarHeader hdr, |
|
275 |
|
|
276 |
public Object getFieldValueByName(BigByteBuffer2 bb, String nameField, LidarHeader hdr, |
|
329 | 277 |
long index) { |
330 | 278 |
|
331 |
readPoint(bb, hdr, index); |
|
332 |
|
|
333 |
if(nameField.equalsIgnoreCase("X")) |
|
334 |
return ValueFactory.createValue(getX()*hdr.getXScale()+hdr.getXOffset()); |
|
335 |
else if(nameField.equalsIgnoreCase("Y")) |
|
336 |
return ValueFactory.createValue(getY()*hdr.getYScale()+hdr.getYOffset()); |
|
337 |
else if(nameField.equalsIgnoreCase("Z")) |
|
338 |
return ValueFactory.createValue(getZ()*hdr.getZScale()+hdr.getZOffset()); |
|
339 |
else if(nameField.equalsIgnoreCase("Intensity")) |
|
340 |
return ValueFactory.createValue(getIntensity()); |
|
341 |
else if(nameField.equalsIgnoreCase("Return_Number")) |
|
342 |
return ValueFactory.createValue(getReturnNumber()); |
|
343 |
else if(nameField.equalsIgnoreCase("Number_of_Returns")) |
|
344 |
return ValueFactory.createValue(getNumberOfReturn()); |
|
345 |
else if(nameField.equalsIgnoreCase("Scan_Direction_Flag")) |
|
346 |
return ValueFactory.createValue(getScanDirectionFlag()); |
|
347 |
else if(nameField.equalsIgnoreCase("Edge_of_Flight_Line")) |
|
348 |
return ValueFactory.createValue(getEdgeOfFlightLine()); |
|
349 |
else if(nameField.equalsIgnoreCase("Classification")) |
|
350 |
return ValueFactory.createValue(getClassification()); |
|
351 |
else if(nameField.equalsIgnoreCase("Synthetic")) |
|
352 |
return ValueFactory.createValue(getSynthetic()); |
|
353 |
else if(nameField.equalsIgnoreCase("Key_Point")) |
|
354 |
return ValueFactory.createValue(getKeyPoint()); |
|
355 |
else if(nameField.equalsIgnoreCase("Withheld")) |
|
356 |
return ValueFactory.createValue(getWithheld()); |
|
357 |
else if(nameField.equalsIgnoreCase("Scan_Angle_Rank")) |
|
358 |
return ValueFactory.createValue(getScanAngleRank()); |
|
359 |
else if(nameField.equalsIgnoreCase("User_Data")) |
|
360 |
return ValueFactory.createValue(getUserData()); |
|
361 |
else if(nameField.equalsIgnoreCase("Point_Source_ID")) |
|
362 |
return ValueFactory.createValue(getPointSourceID()); |
|
363 |
else if(nameField.equalsIgnoreCase("GPS_Time")) |
|
364 |
return ValueFactory.createValue(getTimeGPS()); |
|
365 |
else if(nameField.equalsIgnoreCase("R")) |
|
366 |
return ValueFactory.createValue(getRed()); |
|
367 |
else if(nameField.equalsIgnoreCase("G")) |
|
368 |
return ValueFactory.createValue(getGreen()); |
|
369 |
else if(nameField.equalsIgnoreCase("B")) |
|
370 |
return ValueFactory.createValue(getBlue()); |
|
371 |
|
|
372 |
return null; |
|
279 |
if(nameField.equalsIgnoreCase("GPS_Time")){ |
|
280 |
readPoint(bb, hdr, index); |
|
281 |
return getTimeGPS(); |
|
282 |
} else if (nameField.equalsIgnoreCase("R")) { |
|
283 |
readPoint(bb, hdr, index); |
|
284 |
return getRed(); |
|
285 |
} else if (nameField.equalsIgnoreCase("G")) { |
|
286 |
readPoint(bb, hdr, index); |
|
287 |
return getGreen(); |
|
288 |
} else if (nameField.equalsIgnoreCase("B")) { |
|
289 |
readPoint(bb, hdr, index); |
|
290 |
return getBlue(); |
|
291 |
} |
|
292 |
return super.getFieldValueByName(bb, nameField, hdr, index); |
|
373 | 293 |
} |
374 | 294 |
|
375 |
public FieldDescription[] getFieldDescription() { |
|
376 |
FieldDescription fieldDesc; |
|
377 |
FieldDescription[] fields; |
|
295 |
public ContainerColumnDescription getColumnsDescription(ContainerColumnDescription fields) { |
|
378 | 296 |
|
379 |
fields = new FieldDescription[19]; |
|
380 |
|
|
381 |
fieldDesc = new FieldDescription(); |
|
382 |
fieldDesc.setFieldName("X"); |
|
383 |
fieldDesc.setFieldType(Types.DOUBLE); |
|
384 |
fieldDesc.setFieldLength(20); |
|
385 |
fieldDesc.setFieldDecimalCount(3); |
|
386 |
fields[0] = fieldDesc; |
|
387 |
|
|
388 |
fieldDesc = new FieldDescription(); |
|
389 |
fieldDesc.setFieldName("Y"); |
|
390 |
fieldDesc.setFieldType(Types.DOUBLE); |
|
391 |
fieldDesc.setFieldLength(20); |
|
392 |
fieldDesc.setFieldDecimalCount(3); |
|
393 |
fields[1] = fieldDesc; |
|
394 |
|
|
395 |
fieldDesc = new FieldDescription(); |
|
396 |
fieldDesc.setFieldName("Z"); |
|
397 |
fieldDesc.setFieldType(Types.DOUBLE); |
|
398 |
fieldDesc.setFieldLength(20); |
|
399 |
fieldDesc.setFieldDecimalCount(3); |
|
400 |
fields[2] = fieldDesc; |
|
401 |
|
|
402 |
fieldDesc = new FieldDescription(); |
|
403 |
fieldDesc.setFieldName("Intensity"); |
|
404 |
fieldDesc.setFieldType(Types.INTEGER); |
|
405 |
fieldDesc.setFieldLength(5); |
|
406 |
fieldDesc.setFieldDecimalCount(0); |
|
407 |
fields[3] = fieldDesc; |
|
408 |
|
|
409 |
fieldDesc = new FieldDescription(); |
|
410 |
fieldDesc.setFieldName("Return_Number"); |
|
411 |
fieldDesc.setFieldType(Types.INTEGER); |
|
412 |
fieldDesc.setFieldLength(1); |
|
413 |
fieldDesc.setFieldDecimalCount(0); |
|
414 |
fields[4] = fieldDesc; |
|
415 |
|
|
416 |
fieldDesc = new FieldDescription(); |
|
417 |
fieldDesc.setFieldName("Number_of_Returns"); |
|
418 |
fieldDesc.setFieldType(Types.INTEGER); |
|
419 |
fieldDesc.setFieldLength(1); |
|
420 |
fieldDesc.setFieldDecimalCount(0); |
|
421 |
fields[5] = fieldDesc; |
|
422 |
|
|
423 |
fieldDesc = new FieldDescription(); |
|
424 |
fieldDesc.setFieldName("Scan_Direction_Flag"); |
|
425 |
fieldDesc.setFieldType(Types.INTEGER); |
|
426 |
fieldDesc.setFieldLength(1); |
|
427 |
fieldDesc.setFieldDecimalCount(0); |
|
428 |
fields[6] = fieldDesc; |
|
429 |
|
|
430 |
fieldDesc = new FieldDescription(); |
|
431 |
fieldDesc.setFieldName("Edge_of_Flight_Line"); |
|
432 |
fieldDesc.setFieldType(Types.INTEGER); |
|
433 |
fieldDesc.setFieldLength(1); |
|
434 |
fieldDesc.setFieldDecimalCount(0); |
|
435 |
fields[7] = fieldDesc; |
|
436 |
|
|
437 |
fieldDesc = new FieldDescription(); |
|
438 |
fieldDesc.setFieldName("Classification"); |
|
439 |
fieldDesc.setFieldType(Types.INTEGER); |
|
440 |
fieldDesc.setFieldLength(3); |
|
441 |
fieldDesc.setFieldDecimalCount(0); |
|
442 |
fields[8] = fieldDesc; |
|
297 |
super.getColumnsDescription(fields); |
|
298 |
fields.add("GPS_Time", ColumnDescription.DOUBLE, 20, 5, 0.0); |
|
299 |
fields.add("R", ColumnDescription.INT, 10, 0, 0); |
|
300 |
fields.add("G", ColumnDescription.INT, 10, 0, 0); |
|
301 |
fields.add("B", ColumnDescription.INT, 10, 0, 0); |
|
443 | 302 |
|
444 |
fieldDesc = new FieldDescription(); |
|
445 |
fieldDesc.setFieldName("Synthetic"); |
|
446 |
fieldDesc.setFieldType(Types.INTEGER); |
|
447 |
fieldDesc.setFieldLength(1); |
|
448 |
fieldDesc.setFieldDecimalCount(0); |
|
449 |
fields[9] = fieldDesc; |
|
450 |
|
|
451 |
fieldDesc = new FieldDescription(); |
|
452 |
fieldDesc.setFieldName("Key_Point"); |
|
453 |
fieldDesc.setFieldType(Types.INTEGER); |
|
454 |
fieldDesc.setFieldLength(1); |
|
455 |
fieldDesc.setFieldDecimalCount(0); |
|
456 |
fields[10] = fieldDesc; |
|
457 |
|
|
458 |
fieldDesc = new FieldDescription(); |
|
459 |
fieldDesc.setFieldName("Withheld"); |
|
460 |
fieldDesc.setFieldType(Types.INTEGER); |
|
461 |
fieldDesc.setFieldLength(1); |
|
462 |
fieldDesc.setFieldDecimalCount(0); |
|
463 |
fields[11] = fieldDesc; |
|
464 |
|
|
465 |
fieldDesc = new FieldDescription(); |
|
466 |
fieldDesc.setFieldName("Scan_Angle_Rank"); |
|
467 |
fieldDesc.setFieldType(Types.INTEGER); |
|
468 |
fieldDesc.setFieldLength(3); |
|
469 |
fieldDesc.setFieldDecimalCount(0); |
|
470 |
fields[12] = fieldDesc; |
|
471 |
|
|
472 |
fieldDesc = new FieldDescription(); |
|
473 |
fieldDesc.setFieldName("User_Data"); |
|
474 |
fieldDesc.setFieldType(Types.INTEGER); |
|
475 |
fieldDesc.setFieldLength(3); |
|
476 |
fieldDesc.setFieldDecimalCount(0); |
|
477 |
fields[13] = fieldDesc; |
|
478 |
|
|
479 |
fieldDesc = new FieldDescription(); |
|
480 |
fieldDesc.setFieldName("Point_Source_ID"); |
|
481 |
fieldDesc.setFieldType(Types.INTEGER); |
|
482 |
fieldDesc.setFieldLength(10); |
|
483 |
fieldDesc.setFieldDecimalCount(0); |
|
484 |
fields[14] = fieldDesc; |
|
485 |
|
|
486 |
fieldDesc = new FieldDescription(); |
|
487 |
fieldDesc.setFieldName("GPS_Time"); |
|
488 |
fieldDesc.setFieldType(Types.DOUBLE); |
|
489 |
fieldDesc.setFieldLength(20); |
|
490 |
fieldDesc.setFieldDecimalCount(5); |
|
491 |
fields[15] = fieldDesc; |
|
492 |
|
|
493 |
fieldDesc = new FieldDescription(); |
|
494 |
fieldDesc.setFieldName("R"); |
|
495 |
fieldDesc.setFieldType(Types.INTEGER); |
|
496 |
fieldDesc.setFieldLength(10); |
|
497 |
fieldDesc.setFieldDecimalCount(0); |
|
498 |
fields[16] = fieldDesc; |
|
499 |
|
|
500 |
fieldDesc = new FieldDescription(); |
|
501 |
fieldDesc.setFieldName("G"); |
|
502 |
fieldDesc.setFieldType(Types.INTEGER); |
|
503 |
fieldDesc.setFieldLength(10); |
|
504 |
fieldDesc.setFieldDecimalCount(0); |
|
505 |
fields[17] = fieldDesc; |
|
506 |
|
|
507 |
fieldDesc = new FieldDescription(); |
|
508 |
fieldDesc.setFieldName("B"); |
|
509 |
fieldDesc.setFieldType(Types.INTEGER); |
|
510 |
fieldDesc.setFieldLength(10); |
|
511 |
fieldDesc.setFieldDecimalCount(0); |
|
512 |
fields[18] = fieldDesc; |
|
513 |
|
|
514 | 303 |
return fields; |
515 | 304 |
} |
516 |
|
|
305 |
|
|
517 | 306 |
public void WritePoint(ByteBuffer bb) { |
518 | 307 |
|
519 | 308 |
byte auxByte; |
... | ... | |
571 | 360 |
|
572 | 361 |
/* |
573 | 362 |
* Set Point from a row |
574 |
* @see com.dielmo.gvsig.lidar.LidarPoint#setPoint(com.hardcode.gdbms.engine.values.Value[], com.dielmo.gvsig.lidar.LidarHeader) |
|
575 | 363 |
*/ |
576 |
public void setPoint(Value[] row, LidarHeader hdr) { |
|
577 |
double auxX = ((DoubleValue)(row[0])).getValue(); |
|
578 |
double auxY = ((DoubleValue)(row[1])).getValue(); |
|
579 |
double auxZ = ((DoubleValue)(row[2])).getValue(); |
|
364 |
public void setPoint(Object[] row, LidarHeader hdr) { |
|
365 |
|
|
366 |
super.setPoint(row, hdr); |
|
580 | 367 |
|
581 |
setX((int) ((auxX-hdr.getXOffset())/hdr.getXScale())); |
|
582 |
setY((int) ((auxY-hdr.getYOffset())/hdr.getYScale())); |
|
583 |
setZ((int) ((auxZ-hdr.getZOffset())/hdr.getZScale())); |
|
584 |
|
|
585 |
setIntensity(((IntValue)(row[3])).getValue()); |
|
586 |
setReturnNumber(((IntValue)(row[4])).byteValue()); |
|
587 |
setNumberOfReturn(((IntValue)(row[5])).byteValue()); |
|
588 |
setScanDirectionFlag(((IntValue)(row[6])).byteValue()); |
|
589 |
setEdgeOfFlightLine(((IntValue)(row[7])).byteValue()); |
|
590 |
setClassification((char) (((IntValue)(row[8])).byteValue() & 0xFF)); |
|
591 |
|
|
592 |
setSynthetic((byte) (((IntValue)(row[9])).byteValue())); |
|
593 |
setKeyPoint((byte) (((IntValue)(row[10])).byteValue())); |
|
594 |
setWithheld((byte) (((IntValue)(row[11])).byteValue())); |
|
595 |
|
|
596 |
setScanAngleRank(((IntValue)(row[12])).byteValue()); |
|
597 |
setUserData((char) (((IntValue)(row[13])).byteValue() & 0xFF)); |
|
598 |
setPointSourceID(((IntValue)(row[14])).getValue()); |
|
599 |
|
|
600 |
setTimeGPS(((DoubleValue)(row[15])).getValue()); |
|
601 |
|
|
602 |
setRed(((IntValue)(row[16])).getValue()); |
|
603 |
setGreen(((IntValue)(row[17])).getValue()); |
|
604 |
setBlue(((IntValue)(row[18])).getValue()); |
|
368 |
setTimeGPS(((Double)(row[15]))); |
|
369 |
setRed(((Integer)(row[16]))); |
|
370 |
setGreen(((Integer)(row[17]))); |
|
371 |
setBlue(((Integer)(row[18]))); |
|
605 | 372 |
} |
606 | 373 |
} |
Also available in: Unified diff