public Point<T> build() {
        requireNonNull(epochTime, "Points must have a time");
        requireNonNull(latitude, "Points must have a latitude");
        requireNonNull(longitude, "Points must have a longitude");

        Position pos = new Position(
            Instant.ofEpochMilli(epochTime), LatLong.of(latitude, longitude), altitude);

        Velocity vel = (nonNull(speed) && nonNull(course))
            ? new Velocity(speed, course)
            : null;

        return new Point<>(pos, vel, trackId, rawData);
    }
@Test
    public void testCopier() {

        Point<String> testPoint = getTestPoint();
        Point<String> copiedPoint = (new PointBuilder<>(testPoint)).build();

        assertThat(testPoint, is(copiedPoint));
    }