Calcul de pentes et raster

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

Calcul de pentes et raster

MaudC
Bonjour,

Je souhaite sélectionner des terres où la pente est inférieure par exemple à 30%.
Je dispose du raster BD Alti et ai utilisé la requête suivante :

create table Pente as select ST_D8Slope(raster) as raster from MNT1000_L93_FRANCE ;

J'obtiens donc un nouveau raster. Mais je ne vois pas comment à partir de là ne sélectionner que les zones qui m'intéressent. Je pensais utiliser :

select * from Pente where raster < 30;

Mais je ne sais pas vraiment que mettre à la place de "raster".

De plus quand j'effectue des requêtes avec des opérateurs de comparaisons (dans la V4 et la V3) j'obtiens un message d'erreur.

Bon week end,

Maud C

Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Bonjour,

J'obtenais des messages d'erreur m'indiquant qu'il y avait un problème avec les opérateurs de comparaison. L'erreur venait en fait du fait que j'utilisais le champ 'précipitation', en le renomant 'precipitation' (sans accent), l'erreur a disparu.

Pour mon premier problème, lié aux rasters, j'ai donc vectorisé ma table 'Pente'. Mais je ne sais toujours pas comment utiliser les données obtenues. J'obtiens une table avec 3 champs 'gid' 'the_geom' 'value'. Comment selectionner les zones où la pente est inférieur à 30% ?

J'effectue cette requête : select * from PentePolygone where value < 0.3;

Et obtiens un message d'erreur.

Merci
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
Bonjour Maud,

Désolé pour le retard de réponse ... les ponts sont passés par là :-)
Quoi qu'il en soit je vois que tu progresses.
Si tu as une table vecteur avec trois colonne alors tu as fait le plus dur.
Ta requête me semble correcte. Pourrais-tu nous copier/coller ton message d'erreur (remarque globale à tout tes autres mails --> les messages d'erreurs sont intéressants que si tu nous les copies )

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Pas de soucis !

Le message d'erreur étant un peu long je ne l'ai pas posté, le voici :

ERROR [Thread-33] (ExecuteScriptProcess.java:104) - Ne peut pas analyser le script
org.gdms.sql.engine.ParseException: Parse error on line 6 at character 28: found 'WHERE', expected ';'.
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:64)
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:54)
        at org.gdms.sql.engine.AbstractEngineStep.$greater$eq$colon(EngineStep.scala:62)
        at org.gdms.sql.engine.EngineStep$$anon$1.doOperation(EngineStep.scala:46)
        at org.gdms.sql.engine.EngineStep$class.$greater$eq$colon(EngineStep.scala:41)
        at org.gdms.sql.engine.EngineStep$$anon$1.$greater$eq$colon(EngineStep.scala:44)
        at org.gdms.sql.engine.Engine$.parseScript(Engine.scala:122)
        at org.gdms.sql.engine.Engine.parseScript(Engine.scala)
        at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:102)
        at org.orbisgis.view.background.Job.run(Job.java:74)
        at org.orbisgis.view.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:71)
        at java.lang.Thread.run(Unknown Source)
Caused by: MismatchedTokenException(387!=49)
        at org.gdms.sql.parser.GdmSQLParser.recoverFromMismatchedToken(GdmSQLParser.java:453)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.gdms.sql.parser.GdmSQLParser.statement(GdmSQLParser.java:1062)
        at org.gdms.sql.parser.GdmSQLParser.start_rule(GdmSQLParser.java:517)
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:62)
        ... 11 more

Après la requête suivante :
select * from PentePolygone where value < 0.3;

Cordialement,

Maud
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
A mon avis le problème vient du fait que le champ value est un mot clé de la grammaire SQL (on le voit car il est affiché en bleu dans la console SQL).

Aussi pourrais-tu tenter de renommer ton champ (via un alter table) ?
ALTER TABLE PentePolygone RENAME COLUMN value to valeur;
SELECT * FROM PentePolygone where valeur < 0.3;
Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
En effet, value apparait comme un mot clé en sql.

Après la requête proposée, j'obtiens ce nouveau message d'erreur :

ERROR [Thread-43] (ExecuteScriptProcess.java:104) - Ne peut pas analyser le script
org.gdms.sql.engine.ParseException: Parse error on line 6 at character 40: found 'VALUE', expected 'LONG_ID'.
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:64)
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:54)
        at org.gdms.sql.engine.AbstractEngineStep.$greater$eq$colon(EngineStep.scala:62)
        at org.gdms.sql.engine.EngineStep$$anon$1.doOperation(EngineStep.scala:46)
        at org.gdms.sql.engine.EngineStep$class.$greater$eq$colon(EngineStep.scala:41)
        at org.gdms.sql.engine.EngineStep$$anon$1.$greater$eq$colon(EngineStep.scala:44)
        at org.gdms.sql.engine.Engine$.parseScript(Engine.scala:122)
        at org.gdms.sql.engine.Engine.parseScript(Engine.scala)
        at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:102)
        at org.orbisgis.view.background.Job.run(Job.java:74)
        at org.orbisgis.view.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:71)
        at java.lang.Thread.run(Unknown Source)
Caused by: MismatchedTokenException(376!=29)
        at org.gdms.sql.parser.GdmSQLParser.recoverFromMismatchedToken(GdmSQLParser.java:453)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.gdms.sql.parser.GdmSQLParser.alter_action(GdmSQLParser.java:11633)
        at org.gdms.sql.parser.GdmSQLParser.alter_table_statement(GdmSQLParser.java:10989)
        at org.gdms.sql.parser.GdmSQLParser.statement(GdmSQLParser.java:918)
        at org.gdms.sql.parser.GdmSQLParser.start_rule(GdmSQLParser.java:517)
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:62)
        ... 11 more


J'utilise désormais la dernière version d'OrbisGIS, peut être que l'erreur provient de là ?

Maud
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
Ok, donc le soucis semble être toujours le même. Le mot clé "value" parasite l'instruction.

Peux-tu tester quelque chose comme ça
CREATE TABLE PentePolygone2 AS SELECT the_geom, gid, value as valeur FROM PentePolygone;
SELECT * FROM PentePolygone2 where valeur < 0.3;
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Encore un message d'erreur !

ERROR [Thread-57] (ExecuteScriptProcess.java:104) - Ne peut pas analyser le script
org.gdms.sql.engine.ParseException: Parse error on line 6 at character 51: found ',', expected ';'.
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:64)
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:54)
        at org.gdms.sql.engine.AbstractEngineStep.$greater$eq$colon(EngineStep.scala:62)
        at org.gdms.sql.engine.EngineStep$$anon$1.doOperation(EngineStep.scala:46)
        at org.gdms.sql.engine.EngineStep$class.$greater$eq$colon(EngineStep.scala:41)
        at org.gdms.sql.engine.EngineStep$$anon$1.$greater$eq$colon(EngineStep.scala:44)
        at org.gdms.sql.engine.Engine$.parseScript(Engine.scala:122)
        at org.gdms.sql.engine.Engine.parseScript(Engine.scala)
        at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:102)
        at org.orbisgis.view.background.Job.run(Job.java:74)
        at org.orbisgis.view.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:71)
        at java.lang.Thread.run(Unknown Source)
Caused by: MismatchedTokenException(10!=49)
        at org.gdms.sql.parser.GdmSQLParser.recoverFromMismatchedToken(GdmSQLParser.java:453)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.gdms.sql.parser.GdmSQLParser.statement(GdmSQLParser.java:1062)
        at org.gdms.sql.parser.GdmSQLParser.start_rule(GdmSQLParser.java:517)
        at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:62)
        ... 11 more

J'avais pensé modifier manuellement le nom de la colonne en passant par la V3.0.2, mais cette version ne peut pas lire un fichier venant de la V4.0

Echec à l'ouverture de l'élement.
Caused by: Echec à l'ouverture de l'élement.
Caused by: Cannot open the source
Caused by: java.io.IOException: Unsupported gdms format version: 4
Caused by: Unsupported gdms format version: 4
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Alexis.G
Bonjour,

y a-t-il effectivement une virgule dans ton script ? Je suis curieux de
voir la ligne 6 du script ;-) Je me dis que tu as peut être utilisé une
virgule quand tu as rentré ta valeur limite, soit 0,3 au lieu de 0.3. Ou
que tu as peut êtr utilisé une virgule à la place du point-virgule en
fin d'instruction.


Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Bonjour,

Voici la ligne 6 :

select * from PentePolygone where value < 0.3;

Je pense comme le suggère Gwendall que l'erreur vient bien du nom de la colonne 'value'.
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
Oui mais Maud, avec ma requête, tu n'écris plus "value" mais "valeur"
As-tu bien copié collé mes deux lignes d'instructions ?
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Oui, oui, je réécrivais ici ma toute 1ère requête, ensuite j'ai copié collé les instructions !
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
Donc résumons ...

1/ renommer le champ "value"
CREATE TABLE PentePolygone2 AS SELECT the_geom, gid, value as valeur FROM PentePolygone;
ça passe ? Tu as bien une nouvelle table avec un champ nommé "valeur" ?

2/ le filtrage des données
SELECT * FROM PentePolygone2 where valeur < 0.3;
Quand tu exécutes cette instruction, tu obtiens une erreur ?
Comme le souligne Alexis, as-tu essayé la même requête en mettant une valeur entière ... juste pour vérifier que ça passe.
SELECT * FROM PentePolygone2 where valeur < 1;
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Je ne dépasse pas l'étape 1, j'obtiens ce message d'erreur après l'instruction :

CREATE TABLE PentePolygone2 AS SELECT the_geom, gid, value as valeur FROM PentePolygone;

ERROR [Thread-66] (ExecuteScriptProcess.java:104) - Ne peut pas analyser le script
org.gdms.sql.engine.ParseException: Parse error on line 6 at character 51: found ',', expected ';'.
    at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:64)
    at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:54)
    at org.gdms.sql.engine.AbstractEngineStep.$greater$eq$colon(EngineStep.scala:62)
    at org.gdms.sql.engine.EngineStep$$anon$1.doOperation(EngineStep.scala:46)
    at org.gdms.sql.engine.EngineStep$class.$greater$eq$colon(EngineStep.scala:41)
    at org.gdms.sql.engine.EngineStep$$anon$1.$greater$eq$colon(EngineStep.scala:44)
    at org.gdms.sql.engine.Engine$.parseScript(Engine.scala:122)
    at org.gdms.sql.engine.Engine.parseScript(Engine.scala)
    at org.orbisgis.view.sqlconsole.actions.ExecuteScriptProcess.run(ExecuteScriptProcess.java:102)
    at org.orbisgis.view.background.Job.run(Job.java:74)
    at org.orbisgis.view.background.RunnableBackgroundJob.run(RunnableBackgroundJob.java:71)
    at java.lang.Thread.run(Unknown Source)
Caused by: MismatchedTokenException(10!=49)
    at org.gdms.sql.parser.GdmSQLParser.recoverFromMismatchedToken(GdmSQLParser.java:453)
    at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
    at org.gdms.sql.parser.GdmSQLParser.statement(GdmSQLParser.java:1062)
    at org.gdms.sql.parser.GdmSQLParser.start_rule(GdmSQLParser.java:517)
    at org.gdms.sql.engine.step.parsing.ParsingStep$.doOperation(ParsingStep.scala:62)
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
Ok. On est bien d'accord que ta table "PentePolygone" est une couche vecteur (un gdms), constituée de 3 champs ? Un petit screenshot serait le bienvenue.

Cette couche a été produite dans la V3.0.2. Si c'est un gdms et que tu l'ouvres dans la V4.0, il se peut que tu ais des soucis. Aussi il serait plus prudent de faire ces deux requêtes dans la V3.0.2 (si ce n'est pas déjà le cas).
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Alexis.G
In reply to this post by MaudC
L'instruction que vous donnez est bien celle présente à la ligne 6 de
votre script, dans la console SQL ?
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Oui c'est bien l'instruction presente a la ligne 6, les autres sont de precedentes instructions que j'ai garde en commentaire. La seule "active" dans le script est bien la ligne 6.
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

Gwendall Petit
Administrator
Sinon, simple remarque mais as-tu vu que dans la V3.0.2 tu as un outil dans le TOC (clic-droit sur ton raster) qui te permet d'extraire des pixels (Extraction de pixels).
En ouvrant cet outil, tu n'as plus qu'à définir la plage de valeur que tu souhaites conserver et à valider. OrbisGIS te créé alors une nouvelle couche gdms (de type raster) dans le TOC. (Reste à définir les valeur nodata = -9999)

J'espère que ça pourra t'aider

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
Bonjour,

Je n'avais pas vu les message à propos du screenshot !
En fait j'ai tout fait avec la V4.. Mais je peux essayer de toute refaire avec la V3.0.2 !
"PentePolygone" est une couche vecteur constituée de 3 champs..



( Je n'ai pas réussi à mettre une image plus grande! )
Reply | Threaded
Open this post in threaded view
|

Re: Calcul de pentes et raster

MaudC
J'ai essayé une petite manipulation, je réussi à modifier le nom 'value' mais je n'obtiens pas les bonnes valeurs.. Voici mes instructions depuis le début

--analyse spatiale calcul de pente en fonction topographie
--memoire insuffisante pour MNT250_L93_FRANCE
--create table Pente as select ST_D8Slope(raster) as raster from MNT1000_L93_FRANCE;

--Creation d'un gdms (vecteur)
--create table PentePolygone as select * from ST_RasterToPolygons(Pente);

--Creation d'une grille qui permet d'avoir des polygones de meme taille, sinon juste en vectorisant, les polygones de valeurs egales fusionnent !
--CREATE TABLE PenteGrid_1000 as select * from ST_CreateGrid(PentePolygone, 1000,1000);

--Creation d'une table ds laquelle on veut ttes les géométries de la grille créée. Lier valeur des pixels du raster (avec la fonction ST_PIXELVALUE) au centroïde de chaque polygone de la grille
--CREATE TABLE PenteFR as SELECT a.the_geom, a.id, ST_PIXELVALUE(b.raster, ST_CENTROID(a.the_geom)) as valeur from PenteGrid_1000 a, Pente b;

Je pense ne plus être trop loin du but, mais désormais la colonne valeur de la table PenteFR a des valeurs incohérentes avec les valeurs de la colonne value de la table PentePolygone ! J'obtiens parfois valeur=-9999
Mais peut être me suis-je trop compliqué, au final je veux juste pouvoir sélectionner des zones avec une certaine pente, et également des zones avec une certaine altitude.

Cordialement,

Maud

12