Ok , I guess I will use tables only.
thanks aaime.
Andrea Aime a écrit :
> johann sorel ha scritto:
>> Here is a test case :
>>
>> CREATE TABLE places
>> (
>> ref_id character(8) NOT NULL,
>> emplacement geometry,
>> CONSTRAINT "mainKey" PRIMARY KEY (ref_id)
>> )
>> WITH (OIDS=FALSE);
>> ALTER TABLE places OWNER TO admin;
>>
>> //dont forget to add the column in the geometry_columns
>>
>> insert into places values('SCR08123', GeometryFromText('POINT(1
>> 3)',4326));
>>
>> CREATE OR REPLACE VIEW myview AS
>> SELECT places.ref_id, places.emplacement
>> FROM places;
>>
>> ALTER TABLE myview OWNER TO admin;
>>
>>
>> final Map params = new HashMap<String, Object>();
>> params.put("dbtype", "postgis");
>> params.put(PostgisDataStoreFactory.HOST.key, "...");
>> params.put(PostgisDataStoreFactory.PORT.key, 5432);
>> params.put(PostgisDataStoreFactory.SCHEMA.key, "public");
>> params.put(PostgisDataStoreFactory.DATABASE.key, "...");
>> params.put(PostgisDataStoreFactory.USER.key, "...");
>> params.put(PostgisDataStoreFactory.PASSWD.key, "...");
>> DataStore store = DataStoreFinder.getDataStore(params);
>> FeatureSource fs =
>> store.getFeatureSource("myview");
>> fs.getBounds(); //RAISE ERROR
>>
>> First try to connect to the Table, it works
>> Next try to connect to the view and you will have a :
>> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
>> at com.vividsolutions.jts.geom.Envelope.init(Envelope.java:254)
>> at com.vividsolutions.jts.geom.Envelope.<init>(Envelope.java:186)
>> at
>> org.geotools.geometry.jts.ReferencedEnvelope.<init>(ReferencedEnvelope.java:203)
>>
>
>
> Hum, I run the above code and fs.getBounds() does not raise an
> error, it return null instead. Are you trying to build a referenced
> envelope out of it in your code?
> Mind that if you do, you have to deal with null values,
> FeatureSource.getBounds() javadoc says that the method can return null
> if there is no optimized way to compute the bounds.
> What we do in GeoServer is that when that happens, we fall back
> on an explicity computation by scanning manually all the features
> (which might be very expensive, but in our use case, acceptable
> since it's a one time operation, then the bounds get cached).
> Also mind that computing the bounds can literally take minutes
> even using the optimized methods, I have a table with 20 million
> roads where the optimized getBounds() runs for 2 minutes straight
> before returning a result.
>
> Anyways, you're right that getBounds() fails for a view, there is
> a design problem in the postgis data store. In practice, postgis
> ds does not have a stand alone FeatureSource, only a FeatureStore
> has been coded. When the primary key is missing (as in a view)
> a plain JDBCFeatureSource is returned, that knows nothing of
> postgis specifics, and that one always return null to getBounds().
> If you add the oid column the datastore will think you're using
> a old postgres with oid support, assume that one can be treated
> as a primary key, and return an optimized PostgisFeatureStore
> instead.
>
> Fixing this would require major surgery, that time is better
> spent porting the postgis data store to the new jdbc architecture
> instead. I've created a jira issue so that this kind of
> test will be added to the jdbc-ng standard test suite:
> http://jira.codehaus.org/browse/GEOT-2067
>
> Cheers
> Andrea
>
--
Johann Sorel
Company - Geomatys GIS Developer
Mail - [EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel