ExpressionBasedLoopJoinCommand cannot be cast

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

ExpressionBasedLoopJoinCommand cannot be cast

Guillaume
Bonjour,

Je me permets de vous faire part d'un problème que je rencontre actuellement.
L'expression SQL (via OrbisGIS 4.0) suivante :

CREATE TABLE Noise256 AS
SELECT ST_INTERSECTION(n.the_geom, f.the_geom)
FROM Fishnet256_300 as f, NoiseUnionDiss as n, VertouNM as v
WHERE ST_INTERSECTS(n.the_geom, f.the_geom) AND ST_CONTAINS(v.the_geom, f.the_geom);

me renvoie ce message d'erreur :

Running instruction 1/1 :
...
ERROR [Thread-85] (RunnableBackgroundJob.java:73) - Fatal error on the job named Executing script
java.lang.ClassCastException: org.gdms.sql.engine.commands.join.ExpressionBasedLoopJoinCommand cannot be cast to org.gdms.sql.engine.commands.scan.IndexQueryScanCommand
        at org.gdms.sql.engine.commands.join.SpatialIndexedJoinCommand.doPrepare(SpatialIndexedJoinCommand.scala:132)
        at ...

Chose étrange, l'expression SQL sans la deuxième condition fonctionne.
CREATE TABLE Noise256 AS
SELECT ST_INTERSECTION(n.the_geom, f.the_geom)
FROM Fishnet256_300 as f, NoiseUnionDiss as n
WHERE ST_INTERSECTS(n.the_geom, f.the_geom);

Je ne sais si cela provient d'une erreur de ma part, d'un problème de la version OrbisGIS ou encore de mon poste (je ne suis pas administrateur sur cette machine et dois me contenter d'ouvrir le Snapshot depuis MyDocuments...).

Merci par avance pour toute suggestion,
Guillaume
Reply | Threaded
Open this post in threaded view
|

Re: ExpressionBasedLoopJoinCommand cannot be cast

Gwendall Petit
Administrator
Bonjour Guillaume,

Sans même chercher à expliquer ton message d'erreur (je n'ai pas la réponse ), peut-être qu'il faudrait commencer par simplifier ta requête. Même si la théorie dit que ta requête est correcte, je serais assez partant pour décomposer ta requête en deux étapes, afin de n'avoir que deux appels de table dans le FROM (ici tu en as 3).

Tu pourrais avoir quelque chose comme cela :
CREATE TABLE toto AS
   SELECT f.*  
   FROM Fishnet256_300 as f,  VertouNM as v
   WHERE ST_CONTAINS(v.the_geom, f.the_geom);

CREATE TABLE Noise256 AS
   SELECT ST_INTERSECTION(n.the_geom, f.the_geom) as the_geom
   FROM toto as f, NoiseUnionDiss as n
   WHERE ST_INTERSECTS(n.the_geom, f.the_geom);
Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: ExpressionBasedLoopJoinCommand cannot be cast

Guillaume
La décomposition donne le résultat attendu.
Merci de la suggestion.

Guillaume