OrbisGIS 4.0, ST_PrecisionReducer & FunctionRegister

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

OrbisGIS 4.0, ST_PrecisionReducer & FunctionRegister

Olivier B.
Bonjour à tous,

Je rencontre un comportement étrange lorsque j'essaie d'enregistrer la fonction ST_PrecisionReducer sur la version 4.0.

Cas (1) : j'essaie d'appeler la fonction sans l'enregistrer (a priori, elle n'est pas disponible par défaut) :
create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
--> J'obtiens un message d'erreur : Unknown function: 'ST_PRECISIONREDUCER'

Cas (2) : j'enregistre la fonction avant de l'utiliser :
execute FunctionRegister('org.gdms.sql.function.spatial.geometry.simplify.ST_PrecisionReducer');
create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
--> même erreur

Cas (3) : idem à cas (2) mais avec 2 exécutions successives :
execute FunctionRegister('org.gdms.sql.function.spatial.geometry.simplify.ST_PrecisionReducer');
--> pas d'erreurs
create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
--> pas d'erreurs, la couche est bien créée


Je peux donc m'en sortir lorsque j'utilise l'interface d'OrbisGIS. Mon soucis vient du fait que je comptais utiliser la fonction dans un script SQL que je voulais éxécuter en appelant le moteur gdms en ligne de dommande, l'ensemble des traitements étant contenu dans le même fichier.

Merci d'avance si vous avez une explication sur ce fonctionnement en 2 temps pour l'enregistrement de la fonction ST_PrecisionReducer (je ne rencontre pas ce soucis lorsque j'essaie d'enregistrer d'autres fonction comme ST_PlanarGraph).

Olivier.

PS : Je mets les stacktraces en fin de message.
----------------------------------------------------------------------
cas (1) :
DEBUG [Thread-6] (ExecuteScriptProcess.java:82) - Preparing script: create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
ERROR [Thread-6] (DefaultErrorManager.java:51) - Cannot parse script
org.gdms.sql.engine.ParseException: Semantic Error
        at org.gdms.sql.engine.SQLEngine.parse(SQLEngine.java:184)
        at org.orbisgis.core.ui.plugins.views.sqlConsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:84)
        at org.orbisgis.core.background.Job.run(Job.java:77)
        at org.orbisgis.core.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:56)
        at java.lang.Thread.run(Thread.java:662)
Caused by: org.gdms.sql.engine.SemanticException: Unknown function: 'ST_PRECISIONREDUCER'.
        at org.gdms.sql.evaluator.Expression$.apply(Expressions.scala:228)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.org$gdms$sql$engine$logical$LogicPlanBuilder$$parseExpression(LogicPlanBuilder.scala:640)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1$$anonfun$1.apply(LogicPlanBuilder.scala:97)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1$$anonfun$1.apply(LogicPlanBuilder.scala:96)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
        at scala.collection.immutable.List.map(List.scala:45)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1.apply(LogicPlanBuilder.scala:96)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1.apply(LogicPlanBuilder.scala:87)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree(LogicPlanBuilder.scala:87)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree(LogicPlanBuilder.scala:331)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.buildLogicPlan(LogicPlanBuilder.scala:66)
        at org.gdms.sql.engine.ExecutionGraphBuilder$$anonfun$2.apply(ExecutionGraphBuilder.scala:94)
        at org.gdms.sql.engine.ExecutionGraphBuilder$$anonfun$2.apply(ExecutionGraphBuilder.scala:94)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.Iterator$class.foreach(Iterator.scala:660)
        at scala.collection.immutable.VectorIterator.foreach(Vector.scala:621)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:73)
        at scala.collection.immutable.Vector.foreach(Vector.scala:36)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
        at scala.collection.immutable.Vector.map(Vector.scala:36)
        at org.gdms.sql.engine.ExecutionGraphBuilder$.parseStatement(ExecutionGraphBuilder.scala:94)
        at org.gdms.sql.engine.ExecutionGraphBuilder$.build(ExecutionGraphBuilder.scala:79)
        at org.gdms.sql.engine.ExecutionGraphBuilder.build(ExecutionGraphBuilder.scala)
        at org.gdms.sql.engine.SQLEngine.parse(SQLEngine.java:182)
        ... 4 more

Cas (2) :

DEBUG [Thread-6] (ExecuteScriptProcess.java:82) - Preparing script: execute FunctionRegister('org.gdms.sql.function.spatial.geometry.simplify.ST_PrecisionReducer');
create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
ERROR [Thread-6] (DefaultErrorManager.java:51) - Cannot parse script
org.gdms.sql.engine.ParseException: Semantic Error
        at org.gdms.sql.engine.SQLEngine.parse(SQLEngine.java:184)
        at org.orbisgis.core.ui.plugins.views.sqlConsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:84)
        at org.orbisgis.core.background.Job.run(Job.java:77)
        at org.orbisgis.core.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:56)
        at java.lang.Thread.run(Thread.java:662)
Caused by: org.gdms.sql.engine.SemanticException: Unknown function: 'ST_PRECISIONREDUCER'.
        at org.gdms.sql.evaluator.Expression$.apply(Expressions.scala:228)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.org$gdms$sql$engine$logical$LogicPlanBuilder$$parseExpression(LogicPlanBuilder.scala:640)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1$$anonfun$1.apply(LogicPlanBuilder.scala:97)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1$$anonfun$1.apply(LogicPlanBuilder.scala:96)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
        at scala.collection.immutable.List.map(List.scala:45)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1.apply(LogicPlanBuilder.scala:96)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$$anonfun$org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree$1.apply(LogicPlanBuilder.scala:87)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree(LogicPlanBuilder.scala:87)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.org$gdms$sql$engine$logical$LogicPlanBuilder$$buildOperationTree(LogicPlanBuilder.scala:331)
        at org.gdms.sql.engine.logical.LogicPlanBuilder$.buildLogicPlan(LogicPlanBuilder.scala:66)
        at org.gdms.sql.engine.ExecutionGraphBuilder$$anonfun$2.apply(ExecutionGraphBuilder.scala:94)
        at org.gdms.sql.engine.ExecutionGraphBuilder$$anonfun$2.apply(ExecutionGraphBuilder.scala:94)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
        at scala.collection.Iterator$class.foreach(Iterator.scala:660)
        at scala.collection.immutable.VectorIterator.foreach(Vector.scala:621)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:73)
        at scala.collection.immutable.Vector.foreach(Vector.scala:36)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
        at scala.collection.immutable.Vector.map(Vector.scala:36)
        at org.gdms.sql.engine.ExecutionGraphBuilder$.parseStatement(ExecutionGraphBuilder.scala:94)
        at org.gdms.sql.engine.ExecutionGraphBuilder$.build(ExecutionGraphBuilder.scala:79)
        at org.gdms.sql.engine.ExecutionGraphBuilder.build(ExecutionGraphBuilder.scala)
        at org.gdms.sql.engine.SQLEngine.parse(SQLEngine.java:182)
        ... 4 more


Cas (3) :

DEBUG [Thread-6] (ExecuteScriptProcess.java:82) - Preparing script: execute FunctionRegister('org.gdms.sql.function.spatial.geometry.simplify.ST_PrecisionReducer');
DEBUG [Thread-6] (ExecuteScriptProcess.java:98) - Preparing instruction: execute FunctionRegister('org.gdms.sql.function.spatial.geometry.simplify.ST_PrecisionReducer');
DEBUG [Thread-6] (ExecuteScriptProcess.java:186) - Execution time: 0.26
 INFO [Thread-6] (JobQueue.java:115) - Job finished: 1
 INFO [AWT-EventQueue-0] (JobWindow.java:143) - Removed job 1

 
Puis :
 
 DEBUG [Thread-8] (ExecuteScriptProcess.java:82) - Preparing script: create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
DEBUG [Thread-8] (ExecuteScriptProcess.java:98) - Preparing instruction: create table test as select ST_PRECISIONREDUCER(the_geom,2) as the_geom from ligne_valid;
DEBUG [AWT-EventQueue-0] (SourceListModel.java:93) - Showing 3 sources
DEBUG [Thread-8] (ExecuteScriptProcess.java:186) - Execution time: 0.874
 INFO [Thread-8] (JobQueue.java:115) - Job finished: 3
 INFO [AWT-EventQueue-0] (JobWindow.java:143) - Removed job 3
 INFO [AWT-EventQueue-0] (JobQueue.java:57) - Adding a job: 0
 INFO [AWT-EventQueue-0] (JobQueue.java:79) - It's a new job: 0
 INFO [AWT-EventQueue-0] (JobWindow.java:122) - Added job 0
 INFO [AWT-EventQueue-0] (JobQueue.java:92) - Starting job: 0
 INFO [Thread-9] (JobQueue.java:115) - Job finished: 0
 INFO [AWT-EventQueue-0] (JobWindow.java:143) - Removed job 0


Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: OrbisGIS 4.0, ST_PrecisionReducer & FunctionRegister

Olivier B.
Re-bonjour,

J'ai solutionné mon problème en modifiant le code de la classe FunctionManager.java du package gdmssql pour que la fonction ST_PrecisionReducer soit présente dans la liste des fonctions disponibles de façon native.

En y réfléchissant (mais de loin...), je pense que mon problème est lié à une première phase d'analyse syntaxique du script SQL qui ne semble pas prendre en compte l'ajout de la fonction ST_PrecisionReducer dans le vocabulaire connu, alors que ça a l'air de fonctionner pour les autres fonctions...

Olivier.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: OrbisGIS 4.0, ST_PrecisionReducer & FunctionRegister

Alexis.G
Salux,

On ne t'oublie pas, je vais essayer de jeter un oeil sur le problème dès
que possible ;-)

@+

Alexis.
Loading...