Revision 26395 branches/v10/libraries/libDielmoOpenLidar/src/com/dielmo/lidar/LASPoint12F3.java

View differences:

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