package mil.nga.giat.geowave.format.stanag4676; import java.util.Date; import mil.nga.giat.geowave.adapter.vector.utils.TimeDescriptors.TimeDescriptorConfiguration; import org.geotools.feature.AttributeTypeBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.opengis.feature.simple.SimpleFeatureType; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; public class Stanag4676Utils { public static final String TRACK_POINT = "track_point"; public static final String MOTION_POINT = "motion_point"; public static final String TRACK = "track"; public static final String MISSION_SUMMARY = "mission_summary"; public static final String MISSION_FRAME = "mission_frame"; public static final String NAMESPACE = "http://github.com/ngageoint/geowave"; public static SimpleFeatureType createPointDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(TRACK_POINT); simpleFeatureTypeBuilder.setNamespaceURI(NAMESPACE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Point.class).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Point.class).buildDescriptor( "DetailGeometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Mission")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackNumber")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackUUID")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackItemUUID")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackPointSource")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "TimeStamp")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Speed")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Course")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Classification")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Latitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Longitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Elevation")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailLatitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailLongitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailElevation")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "FrameNumber")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "PixelRow")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "PixelColumn")); simpleFeatureTypeBuilder.setDefaultGeometry("geometry"); final TimeDescriptorConfiguration timeConfig = new TimeDescriptorConfiguration(); timeConfig.setTimeName("TimeStamp"); final SimpleFeatureType type = simpleFeatureTypeBuilder.buildFeatureType(); timeConfig.updateType(type); return type; } public static SimpleFeatureType createMotionDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(MOTION_POINT); simpleFeatureTypeBuilder.setNamespaceURI(NAMESPACE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Point.class).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Mission")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackNumber")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackUUID")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackItemUUID")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "MotionEvent")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "StartTime")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "EndTime")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Classification")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Latitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Longitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Elevation")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "FrameNumber")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "PixelRow")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "PixelColumn")); final TimeDescriptorConfiguration timeConfig = new TimeDescriptorConfiguration(); timeConfig.setStartRangeName("StartTime"); timeConfig.setEndRangeName("EndTime"); final SimpleFeatureType type = simpleFeatureTypeBuilder.buildFeatureType(); timeConfig.updateType(type); return type; } public static SimpleFeatureType createTrackDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(TRACK); simpleFeatureTypeBuilder.setNamespaceURI(NAMESPACE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( LineString.class).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( LineString.class).buildDescriptor( "DetailGeometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Mission")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackNumber")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackUUID")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "StartTime")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "EndTime")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Duration")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "MinSpeed")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "MaxSpeed")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "AvgSpeed")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "Distance")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "StartLatitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "StartLongitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "EndLatitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "EndLongitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailStartLatitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailStartLongitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailEndLatitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "DetailEndLongitude")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "PointCount")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "EventCount")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "TrackStatus")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "TurnCount")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "UTurnCount")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "StopCount")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "StopDuration")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Double.class).buildDescriptor( "AvgStopDuration")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Classification")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "ObjectClass")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "ObjectClassConf")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "ObjectClassRel")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "ObjectClassTime")); simpleFeatureTypeBuilder.setDefaultGeometry("geometry"); final TimeDescriptorConfiguration timeConfig = new TimeDescriptorConfiguration(); timeConfig.setStartRangeName("StartTime"); timeConfig.setEndRangeName("EndTime"); final SimpleFeatureType type = simpleFeatureTypeBuilder.buildFeatureType(); timeConfig.updateType(type); return type; } public static SimpleFeatureType createMissionSummaryDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(MISSION_SUMMARY); simpleFeatureTypeBuilder.setNamespaceURI(NAMESPACE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Polygon.class).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Mission")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "StartTime")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "EndTime")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "NumberOfFrames")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Name")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Security")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "ActiveObjectClass")); final TimeDescriptorConfiguration timeConfig = new TimeDescriptorConfiguration(); timeConfig.setStartRangeName("StartTime"); timeConfig.setEndRangeName("EndTime"); final SimpleFeatureType type = simpleFeatureTypeBuilder.buildFeatureType(); timeConfig.updateType(type); return type; } public static SimpleFeatureType createMissionFrameDataType() { final SimpleFeatureTypeBuilder simpleFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); simpleFeatureTypeBuilder.setName(MISSION_FRAME); simpleFeatureTypeBuilder.setNamespaceURI(NAMESPACE); final AttributeTypeBuilder attributeTypeBuilder = new AttributeTypeBuilder(); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Polygon.class).buildDescriptor( "geometry")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( String.class).buildDescriptor( "Mission")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Date.class).buildDescriptor( "TimeStamp")); simpleFeatureTypeBuilder.add(attributeTypeBuilder.binding( Integer.class).buildDescriptor( "FrameNumber")); final TimeDescriptorConfiguration timeConfig = new TimeDescriptorConfiguration(); timeConfig.setTimeName("TimeStamp"); final SimpleFeatureType type = simpleFeatureTypeBuilder.buildFeatureType(); timeConfig.updateType(type); return type; } }