[udig-devel] creating a feature with default values

andrea antonello andrea.antonello at gmail.com
Fri May 2 23:56:37 PDT 2008


Alright, next step:

Since I tried like this and it worked perfectly:

GeometryFactory gF = new GeometryFactory();
            GeometryAttributeType geometryAttribute =
(GeometryAttributeType) AttributeTypeFactory
                    .newAttributeType("the_geom", MultiPoint.class, false, 1, gF
                            .createMultiPoint(new Coordinate[]{new
Coordinate(0.0, 0.0)}));
            AttributeType catAttribute =
AttributeTypeFactory.newAttributeType("cat",
                    Integer.class, true, 1, 1);
            AttributeType levelAttribute =
AttributeTypeFactory.newAttributeType("level",
                    Float.class);

            FeatureType featureType = null;
            featureType = FeatureTypeBuilder.newFeatureType(new
AttributeType[]{geometryAttribute,
                    catAttribute, levelAttribute}, "name");

            AttributeType attributeType = featureType.getAttributeType(0);

            System.out.println(attributeType);
            Object attributes[] = DataUtilities.defaultValues(featureType);
            Feature featureToUse = featureType.create(attributes);

            System.out.println(featureToUse.getDefaultGeometry().getGeometryType());


I felt kind of strange, so I tried to have a look at what the
featuretype of a collection and a feature is:

                FeatureType featureType =
selectedFeatureCollection.getFeatureType();
                Feature next = selectedFeatureCollection.features().next();
                FeatureType featureType2 = next.getFeatureType();

and the are really different:

featureType:
DefaultFeatureType [name=AbstractFeatureCollectionType ,
namespace=http://www.opengis.net/gml , abstract=false ,
types=(org.geotools.feature.type.FeatureAttributeType at e834ce,)]

whereas featureType2 is:
DefaultFeatureType [name=stazioni_meteo ,
namespace=http://www.opengis.net/gml , abstract=false ,
types=(DefaultAttributeType [name=the_geom , type=class
com.vividsolutions.jts.geom.Point , nillable=true, min=1,
max=1],DefaultAttributeType [name=ID , type=class java.lang.Long ,
nillable=true, min=1, max=1],DefaultAttributeType [name=IDSTAZIONE ,
type=class java.lang.Long , nillable=true, min=1,
max=1],DefaultAttributeType [name=Y , type=class java.lang.Double ,
nillable=true, min=1, max=1],DefaultAttributeType [name=X , type=class
java.lang.Double , nillable=true, min=1, max=1],DefaultAttributeType
[name=DESCRIZION , type=class java.lang.String , nillable=true, min=1,
max=1],DefaultAttributeType [name=TIPOLOGIA_ , type=class
java.lang.Long , nillable=true, min=1, max=1],DefaultAttributeType
[name=RELATED_ID , type=class java.lang.Long , nillable=true, min=1,
max=1],DefaultAttributeType [name=RETE_ID , type=class java.lang.Long
, nillable=true, min=1, max=1],DefaultAttributeType [name=ATTIVO ,
type=class java.lang.String , nillable=true, min=1, max=1],)]


which is what I really want. But how do I get it from a layer that
doesn't have any feature on it?

Ciao
Andrea



On Sat, May 3, 2008 at 12:08 AM, andrea antonello
<andrea.antonello at gmail.com> wrote:
> Alright, I think I miss something.
>
>  [...]
>
> >  Object attributes[] = DataUtilities.defaultValues( featureType );
>
>  That is what I thought I would need, btut attributes[0], seems to
>  contain it all:
>
>  [Feature[ id=fid-861f70d_119aa748a37__7fec , the_geom=null , ID=null ,
>  IDSTAZIONE=null , Y=null , X=null , DESCRIZION=null , TIPOLOGIA_=null
>  , RELATED_ID=null , RETE_ID=null , ATTIVO=null ]]
>
>  Isn't this a full feature structure?
>
>  >  attributes[0] = geometry?
>
>  If I do this, then I get an exception in the next:
>
>  >  featureType.create( attributes );
>
>  telling me that:
>
>  IllegalAttribute: org.geotools.feature.Feature , but got
>  com.vividsolutions.jts.geom.Point
>
>  So the attribute is expected to be a feature, instead of one of the
>  attributes, geometry or non geometry?
>
>  Investigating further...
>  Andrea
>
>
>
>
>
>
>  >
>  >  There is also a method for dealing with a single AttributeType
>  >
>  >  Object value = DataUtilities.defaultValue( attributeTypes[0] );
>  >
>  > > Should this work?
>  > >
>  > >
>  >  Your example looked fine (and similar to the code in DataUtilities), I
>  > think you now may be arguing with your DataStore or working with invalid
>  > data?
>  >
>  >
>  >  Jody
>  >  _______________________________________________
>  >  User-friendly Desktop Internet GIS (uDig)
>  >  http://udig.refractions.net
>  >  http://lists.refractions.net/mailman/listinfo/udig-devel
>  >
>


More information about the udig-devel mailing list