package org.jgrasstools.gears;
import java.util.Arrays;
import java.util.List;
import org.jgrasstools.gears.io.las.core.LasRecord;
import org.jgrasstools.gears.io.las.utils.EGpsWeekDays;
import org.jgrasstools.gears.io.las.utils.GpsTimeConverter;
import org.jgrasstools.gears.io.las.utils.LasUtils;
import org.jgrasstools.gears.io.las.utils.LasUtils.VALUETYPE;
import org.jgrasstools.gears.libs.modules.JGTConstants;
import org.jgrasstools.gears.utils.HMTestCase;
import org.joda.time.DateTime;
/**
* Test las utils.
*
* @author Andrea Antonello (www.hydrologis.com)
*/
public class TestLasUtilities extends HMTestCase {
private List<LasRecord> records;
protected void setUp() throws Exception {
LasRecord r1 = new LasRecord();
r1.x = 1.0;
r1.y = 1.0;
r1.z = 3.0;
r1.classification = 1;
r1.intensity = 256;
r1.returnNumber = 1;
r1.numberOfReturns = 3;
LasRecord r2 = new LasRecord();
r2.x = 2.0;
r2.y = 2.0;
r2.z = 6.0;
r2.classification = 2;
r2.intensity = 128;
r2.returnNumber = 2;
r2.numberOfReturns = 3;
LasRecord r3 = new LasRecord();
r3.x = 3.0;
r3.y = 3.0;
r3.z = 9.0;
r3.classification = 3;
r3.intensity = 0;
r3.returnNumber = 3;
r3.numberOfReturns = 3;
records = Arrays.asList(r1, r2, r3);
}
public void testGpsTime() throws Exception {
double adjustedGpsTime = 206990.87;
DateTime gpsTimeToDateTime = LasUtils.adjustedStandardGpsTime2DateTime(adjustedGpsTime);
assertEquals("2011-09-16T11:16:30.870Z", gpsTimeToDateTime.toString());
double dateTimeToStandardGpsTime = LasUtils.dateTimeToStandardGpsTime(gpsTimeToDateTime);
double adjusted = dateTimeToStandardGpsTime - 1E9;
assertEquals(adjustedGpsTime, adjusted, DELTA);
}
public void testWeekSecondsTimeConversion() throws Exception {
double weekSecondsTime = 1622.379604;
DateTime gpsTimeToDateTime = GpsTimeConverter.gpsWeekTime2DateTime(weekSecondsTime);
String expected = "1980-01-06 00:27:02";
assertEquals(expected, gpsTimeToDateTime.toString(JGTConstants.utcDateFormatterYYYYMMDDHHMMSS));
weekSecondsTime = 1622.386961;
gpsTimeToDateTime = GpsTimeConverter.gpsWeekTime2DateTime(weekSecondsTime);
expected = "1980-01-06 00:27:02";
assertEquals(expected, gpsTimeToDateTime.toString(JGTConstants.utcDateFormatterYYYYMMDDHHMMSS));
}
public void testWeekDaysFromTime() throws Exception {
double seconds = 43574.480238020005;
assertEquals(EGpsWeekDays.SUNDAY, EGpsWeekDays.getDay4Seconds(seconds));
seconds = 108370.480238020005;
assertEquals(EGpsWeekDays.MONDAY, EGpsWeekDays.getDay4Seconds(seconds));
seconds = 238270.480238020005;
assertEquals(EGpsWeekDays.TUESDAY, EGpsWeekDays.getDay4Seconds(seconds));
seconds = 382270.1111110005;
assertEquals(EGpsWeekDays.THURSDAY, EGpsWeekDays.getDay4Seconds(seconds));
seconds = 490570.9463;
assertEquals(EGpsWeekDays.FRIDAY, EGpsWeekDays.getDay4Seconds(seconds));
seconds = 600821.123456;
assertEquals(EGpsWeekDays.SATURDAY, EGpsWeekDays.getDay4Seconds(seconds));
}
public void testAvg() throws Exception {
double avg = LasUtils.avg(records, VALUETYPE.ELEVATION);
assertEquals(6.0, avg, DELTA);
avg = LasUtils.avg(records, VALUETYPE.CLASSIFICATION);
assertEquals(2.0, avg, DELTA);
avg = LasUtils.avg(records, VALUETYPE.IMPULSE);
assertEquals(2.0, avg, DELTA);
avg = LasUtils.avg(records, VALUETYPE.INTENSITY);
assertEquals(128.0, avg, DELTA);
}
public void testHistogram() throws Exception {
double[][] avg = LasUtils.histogram(records, VALUETYPE.ELEVATION, 3);
assertEquals(4.0, avg[0][0], DELTA);
assertEquals(1.0, avg[0][1], DELTA);
assertEquals(6.0, avg[1][0], DELTA);
assertEquals(1.0, avg[1][1], DELTA);
assertEquals(8.0, avg[2][0], DELTA);
assertEquals(1.0, avg[2][1], DELTA);
assertEquals(1.0, avg[2][2], DELTA);
}
public void testLastVisiblePointData() throws Exception {
LasRecord r1 = new LasRecord();
r1.x = 1.5;
r1.y = 1.5;
r1.z = 1.0;
LasRecord r2 = new LasRecord();
r2.x = 2.0;
r2.y = 2.0;
r2.z = 4.0;
LasRecord r3 = new LasRecord();
r3.x = 4.0;
r3.y = 2.5;
r3.z = 3.0;
LasRecord base = new LasRecord();
base.x = 1.0;
base.y = 0.5;
base.z = 2.0;
double[] lastVisiblePointData = LasUtils.getLastVisiblePointData(base, Arrays.asList(r1, r2, r3), false);
assertEquals(4.0, lastVisiblePointData[0], DELTA);
assertEquals(2.0, lastVisiblePointData[1], DELTA);
assertEquals(2.0, lastVisiblePointData[2], DELTA);
assertEquals(1.8027756377319946, lastVisiblePointData[3], DELTA);
assertEquals(42.03111377419729, lastVisiblePointData[4], DELTA);
assertEquals(1.0, lastVisiblePointData[5], DELTA);
assertEquals(1.5, lastVisiblePointData[6], DELTA);
assertEquals(1.5, lastVisiblePointData[7], DELTA);
assertEquals(1.118033988749895, lastVisiblePointData[8], DELTA);
assertEquals(131.8103148957786, lastVisiblePointData[9], DELTA);
}
}