package mil.nga.giat.geowave.format.geolife; import java.io.File; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.geotools.feature.AttributeTypeBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.opengis.feature.simple.SimpleFeatureType; import com.vividsolutions.jts.geom.Geometry; /** * This is a convenience class for performing common GPX static utility methods * such as schema validation, file parsing, and SimpleFeatureType definition. */ public class GeoLifeUtils { private static final ThreadLocal<DateFormat> dateFormat = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); } }; public static Date parseDate( String source ) throws ParseException { return dateFormat.get().parse( source); } public static final String GEOLIFE_POINT_FEATURE = "geolifepoint"; public static final String GEOLIFE_TRACK_FEATURE = "geolifetrack"; public static SimpleFeatureType createGeoLifeTrackDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(GEOLIFE_TRACK_FEATURE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Geometry.class).nillable( true).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).nillable( true).buildDescriptor( "StartTimeStamp")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).nillable( true).buildDescriptor( "EndTimeStamp")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Long.class).nillable( true).buildDescriptor( "Duration")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Long.class).nillable( true).buildDescriptor( "NumberPoints")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).nillable( true).buildDescriptor( "TrackId")); return simpleFeatureTypeBuilder.buildFeatureType(); } public static SimpleFeatureType createGeoLifePointDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(GEOLIFE_POINT_FEATURE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Geometry.class).nillable( false).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).nillable( false).buildDescriptor( "trackid")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).nillable( true).buildDescriptor( "pointinstance")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).nillable( true).buildDescriptor( "Timestamp")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).nillable( true).buildDescriptor( "Latitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).nillable( true).buildDescriptor( "Longitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).nillable( true).buildDescriptor( "Elevation")); return simpleFeatureTypeBuilder.buildFeatureType(); } public static boolean validate( final File file ) { return true; } }