The Feature class is used to represents “something that can be drawn on a map”.
A GeoTools Feature stores your information in a data structure composed of Feature, Attributes, and Associations.
To directly create a Feature you can make use of FeatureFactory, or use a builder which makes things a little easier (as it fills in defaults):
//create the builder SimpleFeatureBuilder builder = new SimpleFeatureBuilder(featureType); //add the values builder.add( "Canada" ); builder.add( 1 ); builder.add( 20.5 ); builder.add( new Point( -124, 52 ) ); //build the feature with provided ID SimpleFeature feature = builder.buildFeature( "fid.1" );
In practice you can use a feature much like a java.util.Map to get and put values. The difference is that the “keys” are formally defined by the FeatureType (which helps us swap information between systems).
This is a little bit easier with SimpleFeature which allows direct access to attribute values:
feature.setAttribute( “turbidity”, 3.7 ); Object value = feature.getAttribute( “turbidity” ); // returns double 3.7 stored above
For more information see the examples listed in gt-main Feature.
Most GIS data does not need a full dynamic type system with associations, operations, multiple values. With this in mind we have a “simple” extension of Feature and FeatureType providing to represent this kind of information.
A “simple” feature is an object that can be drawn on a map (ie a feature) that does not contain any complicated internal structure. A SimpleFeature is “flat” recording of key value pairs. At least one of the values should be a Geometry, and the list of keys is known ahead of time.
SimpleFeature may be used when:
Here are the additional methods made available:
Here is an example of constructing a SimpleFeatureType:
SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder(); //set the name b.setName( "Flag" ); //add some properties b.add( "name", String.class ); b.add( "classification", Integer.class ); b.add( "height", Double.class ); //add a geometry property b.setCRS( DefaultGeographicCRS.WSG84 ); b.add( "location", Point.class ); //build the type SimpleFeatureType type = b.buildFeatureType();