package mil.nga.giat.geowave.analytic.extract; import java.util.Iterator; import mil.nga.giat.geowave.adapter.vector.FeatureGeometryHandler; import org.opengis.feature.simple.SimpleFeature; import org.opengis.referencing.ReferenceIdentifier; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.vividsolutions.jts.geom.Geometry; /** * * Extract a Geometry from a Simple Feature. * */ public class SimpleFeatureGeometryExtractor extends EmptyDimensionExtractor<SimpleFeature> implements DimensionExtractor<SimpleFeature> { @Override public Geometry getGeometry( final SimpleFeature anObject ) { final FeatureGeometryHandler handler = new FeatureGeometryHandler( anObject.getDefaultGeometryProperty().getDescriptor()); final Geometry geometry = handler.toIndexValue( anObject).getGeometry(); final int srid = getSRID(anObject); geometry.setSRID(srid); return geometry; } protected static int getSRID( final SimpleFeature geometryFeature ) { final CoordinateReferenceSystem crs = geometryFeature .getDefaultGeometryProperty() .getDescriptor() .getCoordinateReferenceSystem(); if (crs == null) { return 4326; } final ReferenceIdentifier id = getFirst(crs.getIdentifiers()); if (id == null) { return 4326; } return Integer.parseInt(id.getCode()); } protected static final <T> ReferenceIdentifier getFirst( final Iterable<ReferenceIdentifier> iterable ) { if (iterable == null) { return null; } final Iterator<ReferenceIdentifier> it = iterable.iterator(); if (it.hasNext()) { final ReferenceIdentifier id = it.next(); if ("EPSG".equals(id.getCodeSpace())) { return id; } } return null; } @Override public String getGroupID( SimpleFeature anObject ) { final Object v = anObject.getAttribute("GroupID"); return v == null ? null : v.toString(); } }