Features represent the geographic data you may want to manage or analyse with a GIS: they may be houses, roads, streams, surficial geology, lakes, states and so on.
Every Feature is made up of a geometry and attributes: surely you will recognize that Features are designed to be the basic data types for a vector oriented GIS application.
In fact, at present there is a trick to embed a grid coverage into a Feature, but for the moment let's forget about that.
Please refer to the diagram at the bottom of this page during this short tutorial to gain an insight about the classes and interfaces we are going to review.
Each Feature is composed of an array of objects that represents its attributes. The following rules hold:
- each Feature has at least one geometry, which may be null.
- each Feature may have more than one Geometry, but at least one is the default geometry which is used, for example, when rendering the Feature if no other specification is made in the symbolizer.
- each attribute can really be anything, which means it can also be another Feature. This way you can model containment.
For a more detailed explaination, please see the Feature javadoc.
Each Feature is described by a FeatureType, exactly as each java object is described by a Class object.
The FeatureType holds a set of AttributeTypes that describe the feature attributes, in particular, their name, type and validity rules.
As you can see, the FeatureType class also models multiple inheritance, so you can declare feature types that are subtypes (descendant) or simpler feature types.
Among the attribute types there is a special one, the GeometryAttributeType, which describes geometric attributes and holds a reference to the CoordinateReferenceSystem and GeometryFactory. The coordinate reference system is of paramount importance in GIS applications, since it is the only way to associate the numerical value of a Coordinate to a point on the Earth's surface.
Unfortunately, at the moment the DataStores don't have good support for coordinate reference systems, but hopefully this situation will improve over the next few months.