Yep this is a pain, only a few implementations support user defined feature 
ids. 

There are two things:
- check the capabilities of the datastore to see if it supports this 
functionality
- use a "user data" hint to enable the extra functionality

Here is the example from the documentation:

if( featureStore.getQueryCapabilities().isUseExisingFIDSupported() ){ // 
featureStore allows us to create our own featureIDs SimpleFeatureBuilder b = 
new SimpleFeatureBuilder(featureStore.getSchema()); DefaultFeatureCollection 
collection = new DefaultFeatureCollection(null,featureStore.getSchema()); 
String typeName = b.getFeatureType().getTypeName(); for( FeatureIterator 
iter=features.features(); iter.hasNext(); ){ SimpleFeature feature = 
(SimpleFeature) iter.next(); b.init( feature ); // take feature into a builder 
to modify b.featureUserData(Hints.USE_EXISTING_FID, Boolean.TRUE); feature = 
b.buildFeature( typeName+"."+System.currentTimeMillis() ); collection.add( 
feature ); } featureStore.addFeatures(collection); } else { // allow 
featurestore to create featureIDs featureStore.addFeatures( features ); }
And the link:

http://docs.geotools.org/latest/userguide/library/data/featuresource.html#adding-data
 

-- 
Jody Garnett


On Monday, 3 December 2012 at 10:38 PM, Fritz Richter wrote:

> Hi together,
> I'm playing around now for hours an simply can not make it run.
> 
> I try to store a feature into postgis, which is almost working perfectly, 
> except the feature id.
> 
> Polygon polygon = GisUtils.convertToPolygon(tile);
> builder.set("updated", new Date());
> builder.set("geom", polygon);
> ...
> SimpleFeature feature = builder.buildFeature(featureId);
> 
> 
> In my case the featureID is set to "18/12/12". When I look into the database 
> table, the id looks like this "fid--50250c12_13b60c20cc4_-7061".
> I really do not know, why my featureId is not used but the stange id appears.
> 
> Any help?
> 
> My db definition looks like this:
> CREATE TABLE result
> (
>   tile_id text NOT NULL,
>   updated timestamp without time zone NOT NULL,
>   geom geometry,
> ...
>   CONSTRAINT pk_result PRIMARY KEY (tile_id ),
>   CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
>   CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POLYGON'::text 
> OR geom IS NULL),
>   CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 4326)
> )
> WITH (
>   OIDS=FALSE
> );
> ALTER TABLE result
>   OWNER TO postgres;
> 
> 
> ------------------------------------------------------------------------------
> Keep yourself connected to Go Parallel: 
> BUILD Helping you discover the best ways to construct your parallel projects.
> http://goparallel.sourceforge.net
> 
> _______________________________________________
> GeoTools-GT2-Users mailing list
> [email protected] 
> (mailto:[email protected])
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
> 
> 


------------------------------------------------------------------------------
Keep yourself connected to Go Parallel: 
BUILD Helping you discover the best ways to construct your parallel projects.
http://goparallel.sourceforge.net
_______________________________________________
GeoTools-GT2-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to