Riclassificare raster in Postgis

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

Riclassificare raster in Postgis

Romina Di Paolo

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell'uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT
rid,
ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer 
END')
AS rast from qne.qne_rstr

l'intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore 
"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast  l'errore è sempre lo stesso: 

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."


Avete qualche suggerimento in merito?

Grazie in anticipo 
Romina


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Riclassificare raster in Postgis

Luigi Pirelli-2

On 7 April 2014 21:57, Romina Di Paolo <[hidden email]> wrote:
ST_MapAlgebra


Passing a regprocedure argument to a SQL function requires the full function signature to be passed, then cast to a regprocedure type. To pass the above example PL/pgSQL function as an argument, the SQL for the argument is:

'sample_callbackfunc(double precision[], integer[], text[])'::regprocedure

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Riclassificare raster in Postgis

Luca Lanteri
In reply to this post by Romina Di Paolo
Ci provo ma non è detto che siano consigli sensati, è parecchio che non uso le funzioni raster di PG.

Hai provato facendo un cast dell'espressione SQL a text? A quanto pare non viene vista come text, infatti ti dice: st_mapalgebra(raster, unknown);

Prova ad esplicitare tutti i parametri della funzione compresi pixeltype e nodataval. La sintassi della funzione dovrebbe essere  
raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);


Prova ad utilizzare la funzione ST_Reclass, forse è più adatta a quello che vuoi fare tu.

bye
Luca



2014-04-07 21:57 GMT+02:00 Romina Di Paolo <[hidden email]>:

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell'uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT
rid,
ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer 
END')
AS rast from qne.qne_rstr

l'intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore 
"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast  l'errore è sempre lo stesso: 

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."


Avete qualche suggerimento in merito?

Grazie in anticipo 
Romina


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Riclassificare raster in Postgis

Salvatore Larosa
In reply to this post by Romina Di Paolo
Ciao Romina,

On Mon, Apr 7, 2014 at 9:57 PM, Romina Di Paolo <[hidden email]> wrote:

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell'uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT
rid,
ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer 
END')
AS rast from qne.qne_rstr

la tua query è (quasi :-)) corretta, aggiungi solo il valore dell'argomento pixeltype o inserisci NULL come l'esempio seguente:

.....
ST_MapAlgebra(rast, NULL, 'CASE WHEN [rast] BETWEEN 101 and 115 THEN [rast] WHEN [rast] BETWEEN 102 and 166 THEN 0 ELSE 0 END')
.....

Saluti!
-SL
 

l'intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore 
"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast  l'errore è sempre lo stesso: 

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."


Avete qualche suggerimento in merito?

Grazie in anticipo 
Romina


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Riclassificare raster in Postgis

Romina Di Paolo
In reply to this post by Luca Lanteri
grazie dei consigli ma provando ad inserire tutti i parametri e facendo il cast dell'espressione a text mi ritorna sempre lo stesso errore con la differenze che questa volta mi riconosce i parametri passati come testo

"function st_mapalgebra(raster, text,text,text) does not exist"

forse la soluzione sta nel richiamare la funzione 
'sample_callbackfunc(double precision[], integer[], text[])'::regprocedure

ma l'esempio riportato qui http://postgis.net/docs/RT_ST_MapAlgebra.html  non mi è molto chiaro!!!


Il giorno 07 aprile 2014 23:15, Luca Lanteri <[hidden email]> ha scritto:
Ci provo ma non è detto che siano consigli sensati, è parecchio che non uso le funzioni raster di PG.

Hai provato facendo un cast dell'espressione SQL a text? A quanto pare non viene vista come text, infatti ti dice: st_mapalgebra(raster, unknown);

Prova ad esplicitare tutti i parametri della funzione compresi pixeltype e nodataval. La sintassi della funzione dovrebbe essere  
raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);


Prova ad utilizzare la funzione ST_Reclass, forse è più adatta a quello che vuoi fare tu.

bye
Luca



2014-04-07 21:57 GMT+02:00 Romina Di Paolo <[hidden email]>:

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell'uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT
rid,
ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer 
END')
AS rast from qne.qne_rstr

l'intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore 
"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast  l'errore è sempre lo stesso: 

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."


Avete qualche suggerimento in merito?

Grazie in anticipo 
Romina


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Riclassificare raster in Postgis

Luigi Pirelli-2

2014-04-08 10:05 GMT+02:00 Romina Di Paolo <[hidden email]>:
::regprocedure

la funzione magari sta scritta bene... o magari cambiala in base a quel che ha suggerito salvatore, il mio (da letteratura) suggerimento e' fare il cast della stringa a ::regprocedure

cioe' fai '<qui la tua query>'::regprocedure perche' altirmenti lo prende come text e non trova la firma della api corretta.... evidentemente non fa un cast implicito.

ciao ginetto

p.s. :::pubblicita'::: questa dovrebbe essere la soluzione a detta della pag205 di Postgis2 cookbook di Paolo Corti ;)

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Riclassificare raster in Postgis

Romina Di Paolo
Grazie Gino del consiglio, adesso finalmente qualcosa è cambiato

CREATE TABLE qne.test_raster as SELECT
rid,
ST_MapAlgebra(rast,'8BUI', 'CASE WHEN rast BETWEEN 101 and 115 THEN rast WHEN rast BETWEEN 102 and 166 THEN 0
ELSE 0 
END'::regprocedure, NULL::text)
AS rast from qne.qne_rstr


ERRORE:expected a left parenthesis
LINE 4: ST_MapAlgebra(rast,'8BUI', 'CASE WHEN rast BETWEEN 101 and 1...

ho provato sia con doppia parentesi tonda, sia con parentesi quadra ma restituisce sempre un errore di sintassi
                                   ^


Il giorno 08 aprile 2014 10:23, Gino Pirelli <[hidden email]> ha scritto:

2014-04-08 10:05 GMT+02:00 Romina Di Paolo <[hidden email]>:
::regprocedure

la funzione magari sta scritta bene... o magari cambiala in base a quel che ha suggerito salvatore, il mio (da letteratura) suggerimento e' fare il cast della stringa a ::regprocedure

cioe' fai '<qui la tua query>'::regprocedure perche' altirmenti lo prende come text e non trova la firma della api corretta.... evidentemente non fa un cast implicito.

ciao ginetto

p.s. :::pubblicita'::: questa dovrebbe essere la soluzione a detta della pag205 di Postgis2 cookbook di Paolo Corti ;)


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013