org.opengis.feature.Feature Maven / Gradle / Ivy
Show all versions of gt-opengis Show documentation
/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
* (C) 2004-2007 Open Geospatial Consortium Inc.
*
* All Rights Reserved. http://www.opengis.org/legal/
*/
package org.opengis.feature;
import org.opengis.feature.type.FeatureType;
import org.opengis.filter.identity.FeatureId;
import org.opengis.geometry.BoundingBox;
/**
* An instance of {@link FeatureType} representing a geographic feature composed of geometric and
* non-geometric properties.
*
* Beyond being a complex attribute, a feature contains the following additional information:
*
*
* - A default geometry. To be used when drawing when nothing more specific has been provided.
*
- The bounds of all the geometric attributes of the feature
*
*
* @see FeatureType
* @author Jody Garnett (Refractions Research)
* @author Justin Deoliveira (The Open Planning Project)
* @since GeoAPI 2.2
* @version 8.0
*/
public interface Feature extends ComplexAttribute {
/**
* Override and type narrow to FeatureType.
*
* @return The feature type
*/
FeatureType getType();
/**
* A unique identifier for the feature.
*
* getType().isIdentifiable()
must return true
so this value must
* not return null
.
*
*
Generation of the identifier is dependent on the underlying data storage medium. Often
* this identifier is not persistent. Mediums such shapefiles and database tables have "keys"
* built in which map naturally to persistent feature identifiers. But other mediums do not have
* such keys and may have to generate feature identifiers "on-the-fly". This means that client
* code being able to depend on this value as a persistent entity is dependent on which storage
* medium or data source is being used.
*
* @return The feature identifier, never null
.
*/
FeatureId getIdentifier();
/**
* The bounds of this Feature, if available.
*
*
This value is derived from any geometric attributes that the feature is composed of.
*
*
In the case that the feature has no geometric attributes this method should return an
* empty bounds, ie, bounds.isEmpty() == true
. This method should never return
* null
.
*
*
The coordinate reference system of the returned bounds is derived from the geometric
* attributes which were used to compute the bounds. In the event that the feature contains
* multiple geometric attributes which have different crs's, the one defined by {@link
* #getGeometryDescriptor()} should take precedence and the others should be reprojected
* accordingly.
*
* @return the feature bounds, possibly empty.
*/
BoundingBox getBounds();
/**
* The default geometric attribute of the feature.
*
*
This method returns null
in the case where no such attribute exists.
*
* @return The default geometry attribute, or null
.
*/
GeometryAttribute getDefaultGeometryProperty();
/**
* Sets the default geometric attribute of the feature.
*
*
This value must be an attribute which is already defined for the feature. In other words,
* this method can not be used to add a new attribute to the feature.
*
* @param geometryAttribute The new geomtric attribute.
* @throws IllegalArgumentException If the specified attribute is not already an attribute of
* the feature.
*/
void setDefaultGeometryProperty(GeometryAttribute geometryAttribute);
}