|
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 |
|
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. |
| Powered by Nabble | See how NAML generates this page |
