Fwd: [GRASS-user] export profile in .dxf format

Marco Alicera marco.alicera at gmail.com
Thu May 15 10:15:46 EDT 2008


---------- Forwarded message ----------
From: Andrea Ricci <livgr at supereva.it>
Date: 06-mar-2008 8:47
Subject: Re: [GRASS-user] (no subject)
To: grass-user at lists.osgeo.org


Lukas Rohrer wrote:

> Hello and thanks for your input
>
> Is it possible to draw a Profile based on a digital hight model and a
> selectet line?
>
> Sincerely Lukas
>
> --
> --
> Arbeit:
> Tel: +41 44 632 55 98
> ETH Zürich
> Institut für terrestrische Ökosysteme
> Professur Waldökologie
> Universitätstrasse 22
> CH-8092 Zürich
> privat:
> Lukas Rohrer
> c/o Dietschi
> Hohlstrasse 212
> 8004 Zürich
> +41 43 322 03 26
> +41 78 624 93 20
> lukas.rohrer at gmail.com
> May the forest be with you!
> _______________________________________________
> grass-user mailing list
> grass-user at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-user
>
>
>
>
 We made a script that draw a profile "dem based" tracking a line
 The script export the profile in .dxf format with distances and level
labels and write a text file with the profile metadata
 There are some errors and bugs because it's in development.

 Andrea Ricci, Pierpaolo Chiraz
 gfosservices.it


Thanks a lot Andrea!

i changed the subject to make easer to find it.

best regardes

Marco Alicera

#!/bin/bash
 #
 #########################################################################################################
 #
 # MODULE:       r.section for GRASS 6.0 (GRASS Shell Script)
 # AUTHOR(S):    Andrea Ricci, Pierpaolo Chiraz
 #
 # PURPOSE:      Creates dxf territorial profile and dxf export; dem based
 # COPYRIGHT:   (C) 2007 by the GFOSSERVICES
 # REQUIREMENTS:
 #
 #               This program is free software under the GNU General Public
 #               License (>=v2). Read the file COPYING that comes with GRASS
 #               for details.
 #
 ###########################################################################################################
 #OUT="/tmp/out_$$"
 #set -m
 #mkfifo "$OUT"

 #%Module
 #%  description: Create ascii_dxf profile from a raster dem.
 #%End

 #%option
 #% key: cella
 #% type: integer
 #% answer: 10
 #% description: (raster cells resolution)
 #% required : yes
 #%end

 #%option
 #% key: DEM
 #% type: string
 #% gisprompt: old,cell,raster
 #% description: (input raster map)
 #% required : yes
 #%end

 #%option
 #% key: OUT2
 #% type: string
 #% answer: ascii
 #% description: (Nome del file ascii di output)
 #% required : yes
 #%end

 #%option
 #% key: grass_vect
 #% type: string
 #% gisprompt: new,vector,vector
 #% answer: sezione1
 #% description: (Nome del file vettoriale di Grass)
 #% required : yes
 #%end

 #%option
 #% key: dxf_vect
 #% type: string
 #% answer: sezione1
 #% description: (Nome del file .dxf)
 #% required : yes
 #%end

 #%option
 #% key: percorso_dxf
 #% type: string
 #% description: (Percorso di salvataggio del file dxf)
 #% gisprompt: new_file,file,output
 #% required : yes
 #%end

 #%option
 #% key: fattore
 #% type: integer
 #% answer: 1
 #% description: (fattore di esagerazione delle quote)
 #% required : no
 #%end

 #%option
 #% key: griglia
 #% type: integer
 #% answer: 100
 #% description: (passo della griglia x,y)
 #% required : no
 #%end

 #-------------Input testuale metadato-------------
 #%option
 #% key: meta
 #% type: string
 #% answer:
 #% description: (file con metadati della sezione)
 #% gisprompt: new_file,file,input
 #% required : no
 #%end


 if [ -z "$GISBASE" ] ; then
    echo "You must be in GRASS GIS to run this program."
    exit 1
 fi

 if [ "$1" != "@ARGS_PARSED@" ] ; then
    exec g.parser "$0" "$@"
 fi

 DEM=$GIS_OPT_DEM
 OUT2=$GIS_OPT_OUT2
 grass_vect=$GIS_OPT_GRASS_VECT
 dxf_vect=$GIS_OPT_DXF_VECT
 percorso_dxf=$GIS_OPT_PERCORSO_DXF
 cella=$GIS_OPT_CELLA
 OUT=$GIS_OPT_OUT
 meta=$GIS_OPT_META
 fattore=$GIS_OPT_FATTORE
 griglia=$GIS_OPT_GRIGLIA


 if [ -z "$cella" ] ; then
 cella=1;echo -n "Risoluzione del raster (Dimensioni del lato della
cella)= $cella metri"
 fi

 g.region res=$cella

 #Punti della sezione (linea) tramite la quale si calcolano i valori
di giacitura del piano
 xmessage '  INSERISCI 2 PUNTI PER INDIVIDUARE LA TRACCIA DI SEZIONE  '
 d.what.rast -t  >> punti_sezione

 cat punti_sezione | grep -v " " > punti_sezione_corretti
 N_punti_corretti=` cat punti_sezione_corretti | wc -l`

 z=$(($N_punti_corretti/2))
 #----------------------------------------------------------------------------------
 #ciclo per ottenere la X e la Y dei due punti individuati
 #----------------------------------------------------------------------------------
 for ((x=1; x<=$z; x++)) do
        #creazione di un file di estrapolazione dati corretto (cioe'
senza linee vuote)
        b=$(($x*2))
        cat punti_sezione_corretti | sed 's/:/ /g' | awk -F " " '( NR
== '$b' ) { print $1, $2 }' >> XY_PUNTI_FINALE
 done
 #----------------------------------------------------------------------------------
 #ciclo per ottenere la Z dei due punti individuati
 #----------------------------------------------------------------------------------
 cat punti_sezione | grep  actual | sed 's/,/ /g' | sed 's/:/ /g' >
z_punti_sezione_corretti
 NR_Z=` cat z_punti_sezione_corretti | wc -l`

 for ((x=1; x<=$NR_Z; x++)) do
        cat z_punti_sezione_corretti | awk -F " " '( NR == '$x' ) {
print $3 }' >> Z_PUNTI_FINALE
 done
 #----------------------------------------------------------------------------------
 #rimozione di alcuni files testuali
 rm punti_sezione punti_sezione_corretti z_punti_sezione_corretti

 #costruzione del file ascii da importare per la visualizzazione
 echo "ORGANIZATION:" > OUT3
 echo "DIGIT DATE:" >> OUT3
 echo "DIGIT NAME:" >> OUT3
 echo "MAP NAME:" >> OUT3
 echo "MAP DATE:" >> OUT3
 echo "MAP SCALE:" >> OUT3
 echo "OTHER INFO:" >> OUT3
 echo "ZONE:" >> OUT3
 echo "MAP THRESH:" >> OUT3
 echo "VERTI:" >> OUT3

 X1=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 1 ) {print $1}'`
 Y1=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 1 ) {print $2}'`
 X2=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 2 ) {print $1}'`
 Y2=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 2 ) {print $2}'`
 Z1=` cat Z_PUNTI_FINALE | awk -F " " '( NR == 1 ) {print $1}'`
 Z2=` cat Z_PUNTI_FINALE | awk -F " " '( NR == 2 ) {print $1}'`

 #echo "L  2" >> OUT3
 echo L  2 1 >> OUT3
 echo " $X1 $Y1" >> OUT3
 echo " $X2 $Y2" >> OUT3
 echo " 1     1         " >> OUT3


 #importazione del file ascii creato per la creazione della linea di
sezione a monitor
 v.in.ascii input=OUT3 output=$grass_vect format=standard #fs=| skip=0
x=1 y=2 z=0 cat=0
 #stampa sul monitor
 d.mon select=x0
 d.vect map=$grass_vect type=point,line,boundary,centroid,area,face
display=shape icon=basic/x size=8 layer=1 width=0 wscale=1 color=black
fcolor=200:200:200 rgb_column=GRASSRGB llayer=1 lcolor=red
bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center


 #creazione della coppia di coordinate per r.profile
 XY=` echo "$X1,$Y1,$X2,$Y2"`
 echo "coppia di coordinate $XY"
 #r.profile con immissione delle coordinate degli estremi
 r.profile input=$DEM output=OUT profile=$XY null=*

 NP=` cat OUT | wc -l`

 #formattazione del file ascii "distanze-quote"
 echo ORGANIZATION: > $OUT2
 echo DIGIT DATE:   >> $OUT2
 echo DIGIT NAME:   >> $OUT2
 echo MAP NAME:     >> $OUT2
 echo MAP DATE:     >> $OUT2
 echo MAP SCALE:    >> $OUT2
 echo OTHER INFO:   >> $OUT2
 echo ZONE:         >> $OUT2
 echo MAP THRESH:   >> $OUT2
 echo VERTI:        >> $OUT2


 echo L  $NP 1 >> $OUT2

 #routine per l'esagerazione delle quote
 for ((x=1; x<=$NP; x++)) do
 H=` cat OUT | awk -F " " '( NR == '$x' ) { print $2 }'`
 Hf=$(echo "scale=1; ($H * $fattore)" | bc -l)
 echo "$Hf" >> H_fattore
 done
 #estrazione distanze
 cat OUT | awk -F " " '{ print $1 }' > PROGRESSIVE

 paste -d " " PROGRESSIVE H_fattore > OUT_H

 cat OUT_H | awk -F " " '{ print " " $0 }' >> $OUT2
 echo " 1     1         " >> $OUT2

 #trasformazione in vettoriale grass
 #v.in.ascii input=$percorso_ascii/$OUT2 output=Profilo_sezione
format=standard skip=0 x=1 y=2 z=0 cat=0
 v.in.ascii input=$OUT2 output=sezione$grass_vect format=standard
skip=0 x=1 y=2 z=0 cat=0

 #Esportazione della sezione in DXF
 #v.out.dxf input=sezione$grass_vect output="$percorso_dxf""$dxf_vect".dxf
 rm OUT OUT3 OUT_H PROGRESSIVE H_fattore
 rm $OUT2
 rm XY_PUNTI_FINALE Z_PUNTI_FINALE


 #stampa a monitor del profilo di sezione
 d.mon start=x1
 g.region vect=sezione$grass_vect
 d.vect map=sezione$grass_vect
 d.grid size=$griglia origin=0,0  color=170:170:170 bordercolor=0:0:0
 echo Profilo $dxf_vect | d.text color=0:0:0 size=3  at=33,95
 echo Fattore scala verticale x $fattore | d.text color=0:0:0 size=3  at=33,90


 ################################# OPERAZIONI DI REALIZZAZIONE DELLA
GRIGLIA PER L'ESPORTAZIONE DXF #################################

 #ricerca del valore minimo e massimo delle quote
 g.region -g > region_sez

 n=` cat region_sez | awk -F "=" '( NR == 1 ) { print $2 }'`
 s=` cat region_sez | awk -F "=" '( NR == 2 ) { print $2 }'`
 w=` cat region_sez | awk -F "=" '( NR == 3 ) { print $2 }'`
 e=` cat region_sez | awk -F "=" '( NR == 4 ) { print $2 }'`
 rm region_sez
 echo "Y massimo = $n"
 echo "Y minimo = $s"
 echo "X minimo = $w"
 echo "X massimo = $e"

 e_w=$(echo "scale=1; ($e - $w)" | bc -l) # ampiezza asse X
 n_s=$(echo "scale=1; ($n - $s)" | bc -l) # ampiezza asse Y
 echo "ampiezza X = $e_w"
 echo "ampiezza Y = $n_s"

 #numero di suddivisioni
 suddX=$(echo "scale=0; ($e_w / $griglia)" | bc -l) # numero linee Y -
DEFINIRE VARIABILE "$passoX"
 suddY=$(echo "scale=0; ($n_s / $griglia)" | bc -l) # numero linee X -
DEFINIRE VARIABILE "$passoY"
 echo "numero linee X = $suddY"
 echo "numero linee Y = $suddX"

 #PROVIAMO A FORZARE LA COORDINATA DI ORIGINE COME 0 (ZERO)
 w=0


 # DEFINIZIONE  "lineaY" (ORIZZONTALE)
 echo ORGANIZATION: > lineaY
 echo DIGIT DATE:   >> lineaY
 echo DIGIT NAME:   >> lineaY
 echo MAP NAME:     >> lineaY
 echo MAP DATE:     >> lineaY
 echo MAP SCALE:    >> lineaY
 echo OTHER INFO:   >> lineaY
 echo ZONE:         >> lineaY
 echo MAP THRESH:   >> lineaY
 echo VERTI:        >> lineaY

        for ((a=1; a<=$suddY + 1; a++)) do
                if [[ $a == 1 ]]; then
                        echo L  2 1 >> lineaY # L=linea 2= numero di punti
                        echo " $w $s" >> lineaY
                        echo " $e $s" >> lineaY
                        s_mod_abs=$(echo "scale=0; ($s / 1)" | bc -l)
                        echo " 1     $s_mod_abs         " >> lineaY #
Il secondo valore è la categoria
                else
                        echo L  2 1 >> lineaY # L=linea 2= numero di punti
                        s_mod=$(echo "scale=1; ($s + ($griglia * ($a -
1)))" | bc -l)
                        echo " $w $s_mod" >> lineaY
                        echo " $e $s_mod" >> lineaY
                        s_mod_abs=$(echo "scale=0; ($s_mod / 1)" | bc -l)
                        echo " 1     $s_mod_abs         " >> lineaY
#####CATEGORIE (per fare poi la label)#####
                fi
        done


 # DEFINIZIONE  "lineaX" (VERTICALE)
 echo ORGANIZATION: > lineaX
 echo DIGIT DATE:   >> lineaX
 echo DIGIT NAME:   >> lineaX
 echo MAP NAME:     >> lineaX
 echo MAP DATE:     >> lineaX
 echo MAP SCALE:    >> lineaX
 echo OTHER INFO:   >> lineaX
 echo ZONE:         >> lineaX
 echo MAP THRESH:   >> lineaX
 echo VERTI:        >> lineaX

        for ((a=1; a<=$suddX + 1; a++)) do
                if [[ $a == 1 ]]; then
                        echo L  2 1 >> lineaX # L=linea 2= numero di punti
                        echo " $w $s" >> lineaX
                        echo " $w $n" >> lineaX
                        echo " 1     0         " >> lineaX # Il
secondo valore è la categoria
                else
                        w_mod=$(echo "scale=1; ($w + ($griglia * ($a -
1)))" | bc -l)
                        echo L  2 1 >> lineaX # L=linea 2= numero di punti
                        echo " $w_mod $s" >> lineaX
                        echo " $w_mod $n" >> lineaX
                        w_mod_abs=$(echo "scale=0; ($w_mod / 1)" | bc -l)
                        echo " 1     $w_mod_abs         " >> lineaX
#####CATEGORIE (per fare poi la label)#####
                fi
        done

 #------------------------------------------------------------------------------
 #creazione lineaX una alla volta per fare i punti d'intersezione con la sezione
        for ((a=1; a<=$suddX + 1; a++)) do

 echo ORGANIZATION: > lineaX$a
 echo DIGIT DATE:   >> lineaX$a
 echo DIGIT NAME:   >> lineaX$a
 echo MAP NAME:     >> lineaX$a
 echo MAP DATE:     >> lineaX$a
 echo MAP SCALE:    >> lineaX$a
 echo OTHER INFO:   >> lineaX$a
 echo ZONE:         >> lineaX$a
 echo MAP THRESH:   >> lineaX$a
 echo VERTI:        >> lineaX$a

                if [[ $a == 1 ]]; then
                        echo L  2 1 >> lineaX$a # L=linea 2= numero di punti
                        echo " $w $s" >> lineaX$a
                        echo " $w $n" >> lineaX$a
                        echo " 1     1         " >> lineaX # Il
secondo valore è la categoria
                else
                        w_mod=$(echo "scale=1; ($w + ($griglia * ($a -
1)))" | bc -l)
                        echo L  2 1 >> lineaX$a # L=linea 2= numero di punti
                        echo " $w_mod $s" >> lineaX$a
                        echo " $w_mod $n" >> lineaX$a
 #                       w_mod_abs=$(echo "scale=0; ($w_mod / 1)" | bc -l)
                        echo " 1     1         " >> lineaX$a
#####CATEGORIE (per fare poi la label)#####
                fi

        #Procedura per importare in formato vettoriale la griglia
verticale, trasformarla in raster e combinarla con la sezione raster
        v.in.ascii input=$HOME/lineaX$a output=lineaX$a
format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite
        v.to.rast input=lineaX$a output=lineaX$a use=cat layer=1
value=1 rows=4096 --overwrite
        v.to.rast input=sezione$grass_vect output=sezione$grass_vect
use=cat layer=1 value=1 rows=4096 --overwrite
        #r.patch input=lineaX$a,sezione$grass_vect output=ab$a --overwrite


        r.mapcalc "S$a = (lineaX$a + sezione$grass_vect)" #somma di
mappe con cat=1
        r.mapcalc "C$a=if(S$a == 2,1,null())" #viene attribuita cat=2
alle celle cat=2 ed alle altre null

        r.to.vect -v input=C$a output=C$a feature=point --overwrite
#trasformazione da raster a vettore (punto)
        v.out.ascii input=C$a format=point > C$a #scrittura su file di
testo degli attributi del punto (coordinate e categoria)

        Q=` cat C$a | awk -F "|" '( NR == 1 ) { print $2 }'`
#estrazione della variabile che descrive la coordinata nord (in questo
caso la quota-ordinata)
        X=` cat C$a | awk -F "|" '( NR == 1 ) { print $1 }'`
#estrazione della variabile che descrive la coordinata est (in questo
caso l'ascissa)

        #creazione delle coordinate del file puntuale ascii con categoria=quota

                if [[ $a == 1 ]]; then
                        echo P  1 1 >> /dev/null # L=linea 2= numero di punti
                        echo " $X $Q" >> /dev/null
                        Qr=$(echo "scale=1; ($Q / $fattore)" | bc -l)
                        echo " 1     $Qr         " >> /dev/null # Il
secondo valore è la categoria
                else
                        echo P  1 1 >> quotesezioni # L=linea 2= numero di punti
                        echo " $X $Q" >> quotesezioni
                        Qr=$(echo "scale=1; ($Q / $fattore)" | bc -l)
                        echo " 1     $Qr         " >> quotesezioni #
Il secondo valore è la categoria

                fi

        rm lineaX$a C$a
        g.remove vect=lineaX$a,C$a rast=lineaX$a,S$a,C$a
        done

 #formattazione del file
 echo ORGANIZATION: > quotesezioni2
 echo DIGIT DATE:   >> quotesezioni2
 echo DIGIT NAME:   >> quotesezioni2
 echo MAP NAME:     >> quotesezioni2
 echo MAP DATE:     >> quotesezioni2
 echo MAP SCALE:    >> quotesezioni2
 echo OTHER INFO:   >> quotesezioni2
 echo ZONE:         >> quotesezioni2
 echo MAP THRESH:   >> quotesezioni2
 echo VERTI:        >> quotesezioni2
 cat quotesezioni >> quotesezioni2



 g.remove rast=sezione$grass_vect
 rm quotesezioni
 #------------------------------------------------------------------------------


 # DEFINIZIONE  "lineaY secondaria" (ORIZZONTALE)
 echo ORGANIZATION: > lineaYs
 echo DIGIT DATE:   >> lineaYs
 echo DIGIT NAME:   >> lineaYs
 echo MAP NAME:     >> lineaYs
 echo MAP DATE:     >> lineaYs
 echo MAP SCALE:    >> lineaYs
 echo OTHER INFO:   >> lineaYs
 echo ZONE:         >> lineaYs
 echo MAP THRESH:   >> lineaYs
 echo VERTI:        >> lineaYs
 #griglia secondaria più corta e più fitta
 suddYs=$(echo "scale=0; (($suddY + 1)  * 10)" | bc -l) #suddivisione
della griglia principale
 ec=$(echo "scale=0; ($e / 150)" | bc -l) #riduzione della lunghezza
della linea di griglia
        for ((a=1; a<=$suddYs; a++)) do
                if [[ $a == 1 ]]; then
                        echo L  2 1 >> lineaYs # L=linea 2= numero di punti
                        echo " $w $s" >> lineaYs
                        echo " $ec $s" >> lineaYs
                        s_mod_abs=$(echo "scale=0; ($s / 10)" | bc -l)
                        echo " 1     $s_mod_abs         " >> lineaYs #
Il secondo valore è la categoria
                else
                        echo L  2 1 >> lineaYs # L=linea 2= numero di punti
                        s_mod=$(echo "scale=1; ($s + (($griglia / 10)
* ($a - 1)))" | bc -l)
                        echo " $w $s_mod" >> lineaYs
                        echo " $ec $s_mod" >> lineaYs
                        s_mod_abs=$(echo "scale=0; ($s_mod / 10)" | bc -l)
                        echo " 1     $s_mod_abs         " >> lineaYs
#####CATEGORIE (per fare poi la label)#####
                fi
        done

 # DEFINIZIONE  "lineaX secondaria" (VERTICALE)
 echo ORGANIZATION: > lineaXs
 echo DIGIT DATE:   >> lineaXs
 echo DIGIT NAME:   >> lineaXs
 echo MAP NAME:     >> lineaXs
 echo MAP DATE:     >> lineaXs
 echo MAP SCALE:    >> lineaXs
 echo OTHER INFO:   >> lineaXs
 echo ZONE:         >> lineaXs
 echo MAP THRESH:   >> lineaXs
 echo VERTI:        >> lineaXs
 #griglia secondaria più corta e più fitta
 suddXs=$(echo "scale=0; (($suddX + 1)  * 10)" | bc -l) #suddivisione
della griglia principale
 np=$(echo "scale=0; ($n / 100)" | bc -l) #riduzione della lunghezza
della linea di griglia
 nc=$(echo "scale=1; ($np + $s)" | bc -l) #riduzione della lunghezza
della linea di griglia
        for ((a=1; a<=$suddXs; a++)) do
                if [[ $a == 1 ]]; then
                        echo L  2 1 >> lineaXs # L=linea 2= numero di punti
                        echo " $w $s" >> lineaXs
                        echo " $w $nc" >> lineaXs
                        echo " 1     0         " >> lineaXs # Il
secondo valore è la categoria
                else
                        w_mod=$(echo "scale=1; ($w + (($griglia / 10)
* ($a - 1)))" | bc -l)
                        echo L  2 1 >> lineaXs # L=linea 2= numero di punti
                        echo " $w_mod $s" >> lineaXs
                        echo " $w_mod $nc" >> lineaXs
                        w_mod_abs=$(echo "scale=0; ($w_mod / 10)" | bc -l)
                        echo " 1     $w_mod_abs         " >> lineaXs
#####CATEGORIE (per fare poi la label)#####
                fi
        done

 # DEFINIZIONE  "puntiY" (ORIZZONTALE)
 echo ORGANIZATION: > puntiY
 echo DIGIT DATE:   >> puntiY
 echo DIGIT NAME:   >> puntiY
 echo MAP NAME:     >> puntiY
 echo MAP DATE:     >> puntiY
 echo MAP SCALE:    >> puntiY
 echo OTHER INFO:   >> puntiY
 echo ZONE:         >> puntiY
 echo MAP THRESH:   >> puntiY
 echo VERTI:        >> puntiY

        for ((a=1; a<=$suddY + 1; a++)) do
                if [[ $a == 1 ]]; then
                        echo P  1 1 >> puntiY # L=linea 2= numero di punti
                        dw=$(echo "scale=0; ($w - 10)" | bc -l)
#spostamento a sinistra delle label quote
                        echo " $dw $s" >> puntiY
                        s_mod_abs_2=$(echo "scale=0; ($s / $fattore)"
| bc -l) #riscalatura delle quote ai valori reali
                        echo " 1     $s_mod_abs_2         " >> puntiY
# Il secondo valore è la categoria
                else
                        echo P  1 1 >> puntiY # L=linea 2= numero di punti
                        s_mod=$(echo "scale=1; ($s + ($griglia * ($a -
1)))" | bc -l)
                        dw=$(echo "scale=0; ($w - 10)" | bc -l)
#spostamento a sinistra delle label quote
                        echo " $dw $s_mod" >> puntiY
                        s_mod_abs_2=$(echo "scale=0; ($s_mod /
$fattore)" | bc -l) #riscalatura delle quote ai valori reali
                        echo " 1     $s_mod_abs_2         " >> puntiY
#####CATEGORIE (per fare poi la label)#####
                fi
        done

 # DEFINIZIONE  "puntiX" (VERTICALE)
 echo ORGANIZATION: > puntiX
 echo DIGIT DATE:   >> puntiX
 echo DIGIT NAME:   >> puntiX
 echo MAP NAME:     >> puntiX
 echo MAP DATE:     >> puntiX
 echo MAP SCALE:    >> puntiX
 echo OTHER INFO:   >> puntiX
 echo ZONE:         >> puntiX
 echo MAP THRESH:   >> puntiX
 echo VERTI:        >> puntiX

        for ((a=1; a<=$suddX + 1; a++)) do
                if [[ $a == 1 ]]; then
                        echo P  1 1 >> puntiX # L=linea 2= numero di punti
                        ds=$(echo "scale=0; ($s - 10)" | bc -l)
#spostamento in basso delle label progressive
                        echo " $w $ds" >> puntiX
                        echo " 1     0         " >> puntiX # Il
secondo valore è la categoria
                else
                        w_mod=$(echo "scale=1; ($w + ($griglia * ($a -
1)))" | bc -l)
                        echo P  1 1 >> puntiX # L=linea 2= numero di punti
                        ds=$(echo "scale=0; ($s - 10)" | bc -l)
#spostamento in basso delle label progressive
                        echo " $w_mod $ds" >> puntiX
                        w_mod_abs_2=$(echo "scale=0; ($w_mod / 1)" | bc -l)
                        echo " 1     $w_mod_abs_2         " >> puntiX
#####CATEGORIE (per fare poi la label)#####
                fi
        done

 ######CREAZIONE ASCISSA E ORDINATA SINGOLE PER IL SISTEMA DI
RIFERIMENTO LINEARE
 #ascissa
 echo ORGANIZATION: > ascissa
 echo DIGIT DATE:   >> ascissa
 echo DIGIT NAME:   >> ascissa
 echo MAP NAME:     >> ascissa
 echo MAP DATE:     >> ascissa
 echo MAP SCALE:    >> ascissa
 echo OTHER INFO:   >> ascissa
 echo ZONE:         >> ascissa
 echo MAP THRESH:   >> ascissa
 echo VERTI:        >> ascissa
 echo L  2 1 >> ascissa
 echo " $w $s" >> ascissa
 echo " $e $s" >> ascissa
 echo " 1     0         " >> ascissa
 #ordinata
 echo ORGANIZATION: > ordinata
 echo DIGIT DATE:   >> ordinata
 echo DIGIT NAME:   >> ordinata
 echo MAP NAME:     >> ordinata
 echo MAP DATE:     >> ordinata
 echo MAP SCALE:    >> ordinata
 echo OTHER INFO:   >> ordinata
 echo ZONE:         >> ordinata
 echo MAP THRESH:   >> ordinata
 echo VERTI:        >> ordinata
 echo L  2 1 >> ordinata
 echo " $w $s" >> ordinata
 echo " $w $n" >> ordinata
 echo " 1     0         " >> ordinata
 #####################

 #trasformazione da ascii a vettoriale Grass
 v.in.ascii input=$HOME/lineaY output=lineaY format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/lineaX output=lineaX format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/puntiY output=puntiY format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/puntiX output=puntiX format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/ascissa output=ascissa format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/ordinata output=ordinata format=standard fs="
" skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/lineaYs output=lineaYs format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/lineaXs output=lineaXs format=standard fs=" "
skip=0 x=1 y=2 z=0 cat=0 --overwrite
 v.in.ascii input=$HOME/quotesezioni2 output=quotesezioni2
format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite

 #creazione della table del database in base ai valori di categoria
 v.db.addtable map=lineaX layer=1 'columns=cat integer'
 v.db.addtable map=lineaY layer=1 'columns=cat integer'
 v.db.addtable map=puntiX layer=1 'columns=cat integer'
 v.db.addtable map=puntiY layer=1 'columns=cat integer'
 v.db.addtable map=ascissa layer=1 'columns=cat integer'
 v.db.addtable map=ordinata layer=1 'columns=cat integer'
 v.db.addtable map=lineaYs layer=1 'columns=cat integer'
 v.db.addtable map=lineaXs layer=1 'columns=cat integer'
 v.db.addtable map=quotesezioni2 layer=1 'columns=cat integer'

 v.db.addtable map=sezione$grass_vect layer=1 'columns=cat integer'

 #creazione delle labels
 #v.label map=lineaX type=point,line,boundary,centroid layer=1
column=cat labels=lineaX_label xoffset=0 yoffset=0 reference=center
font=standard size=5 color=black rotation=0 width=1 hcolor=none
hwidth=0 background=none border=none opaque=yes


 #stampa a monitor
 d.mon start=x2
 g.region vect=sezione$grass_vect
 d.vect map=sezione$grass_vect
 d.vect map=lineaY
 d.vect map=lineaX
 d.vect map=puntiY
 d.vect map=puntiX
 d.vect map=lineaYs
 d.vect map=lineaXs

 #d.labels labels=lineaX_label

 #--------------Unione dei files (sezione, griglia, punti
coordinate)---------------
 v.patch input=sezione$grass_vect,lineaX,lineaY,lineaYs,lineaXs,puntiX,puntiY,quotesezioni2
output="$dxf_vect"_grafico --overwrite
 v.db.addtable map="$dxf_vect"_grafico layer=1 'columns=cat integer'

 #--------------Esportazione dei files patchati in DXF--------------
 v.out.dxf input="$dxf_vect"_grafico output="$percorso_dxf""$dxf_vect".dxf

 ##########################################

 #ripristino monitor e regione iniziali
 d.mon select=x0
 g.region rast=$DEM

 #metadati della sezione
 v.info -h map=sezione$grass_vect layer=1 > metad

 echo "----------------------------METADATI DELLA
SEZIONE----------------------------" > $meta
 echo " " >> $meta
 echo "Nome del file vettoriale di Grass salvato (Traccia della
sezione): $grass_vect" >> $meta
 echo "Nome del file vettoriale .dxf esportato (Profilo di sezione):
$dxf_vect" >> $meta
 echo "Directory di esportazione del file .dxf: $percorso_dxf" >> $meta
 echo " " >> $meta
 echo "GIS enviroment:" >> $meta
 cat metad | awk '(NR > 1) { print $0 }' >> $meta
 echo " " >> $meta
 echo "Coordinate e quota degli estremi della sezione" >> $meta
 echo "X1,Y1,Z1 = $X1,$Y1,$Z1" >> $meta
 echo "X2,Y2,Z2 = $X2,$Y2,$Z2" >> $meta
 echo " " >> $meta
 H=$(echo "scale=1; $Z1 - $Z2" | bc -l)
 echo "Differenza di quota tra gli estremi della sezione A-B: $H metri" >> $meta
 echo " " >> $meta
 dX=$(echo "scale=1; $X1 - $X2" | bc -l)
 dY=$(echo "scale=1; $Y1 - $Y2" | bc -l)
 L=$(echo "scale=1; sqrt($dX * $dX + $dY * $dY)" | bc -l)
 echo "Lunghezza della sezione: $L metri" >> $meta
 echo " " >> $meta
 echo "Fattore di esagerazione della scala verticale: $fattore" >> $meta
 #--------------------------------------------------------------------------------
 #Output a terminale
 echo "Coordinate e quota degli estremi della sezione"
 echo "X1,Y1,Z1 = $X1,$Y1,$Z1"
 echo "X2,Y2,Z2 = $X2,$Y2,$Z2"
 echo "Differenza di quota tra gli estremi della sezione A-B: $H metri"
 echo "Lunghezza della sezione: $L metri"
 echo "Nome del file vettoriale di Grass salvato (Traccia della
sezione): $grass_vect"
 echo "Nome del file vettoriale .dxf esportato (Profilo di sezione): $dxf_vect"
 echo "Directory di esportazione del file .dxf: $percorso_dxf"
 echo "Fattore di esagerazione della scala verticale: $fattore"

 #RIMOZIONE FILES
 rm metad
 g.remove vect=sezionesezione1,sezione1_grafico,puntiY,puntiX,ordinata,lineaY,lineaX,ascissa,lineaYs,lineaXs,quotesezioni2
 #g.remove vect=sezione1
 rm puntiY puntiX ascissa ordinata lineaX lineaY lineaXs lineaYs
 #g.remove vect=sezione$grass_vect, #Profilo_sezione
 g.remove vect=lineaY
 g.remove vect=lineaX
 #fine




_______________________________________________
 grass-user mailing list
 grass-user at lists.osgeo.org
 http://lists.osgeo.org/mailman/listinfo/grass-user
-------------- next part --------------
#!/bin/bash
#
#########################################################################################################
#
# MODULE:	r.section for GRASS 6.0 (GRASS Shell Script)
# AUTHOR(S):	Andrea Ricci, Pierpaolo Chiraz
#
# PURPOSE:	Creates dxf territorial profile and dxf export; dem based
# COPYRIGHT:   (C) 2007 by the GFOSSERVICES
# REQUIREMENTS:
#
#		This program is free software under the GNU General Public
#		License (>=v2). Read the file COPYING that comes with GRASS
#		for details.
#
###########################################################################################################
#OUT="/tmp/out_$$"
#set -m
#mkfifo "$OUT"

#%Module
#%  description: Create ascii_dxf profile from a raster dem.
#%End

#%option
#% key: cella
#% type: integer
#% answer: 10
#% description: (raster cells resolution)
#% required : yes
#%end

#%option
#% key: DEM
#% type: string
#% gisprompt: old,cell,raster
#% description: (input raster map)
#% required : yes
#%end

#%option
#% key: OUT2
#% type: string
#% answer: ascii
#% description: (Nome del file ascii di output)
#% required : yes
#%end

#%option
#% key: grass_vect
#% type: string
#% gisprompt: new,vector,vector
#% answer: sezione1
#% description: (Nome del file vettoriale di Grass)
#% required : yes
#%end

#%option
#% key: dxf_vect
#% type: string
#% answer: sezione1
#% description: (Nome del file .dxf)
#% required : yes
#%end

#%option
#% key: percorso_dxf
#% type: string
#% description: (Percorso di salvataggio del file dxf)
#% gisprompt: new_file,file,output
#% required : yes
#%end

#%option
#% key: fattore
#% type: integer
#% answer: 1
#% description: (fattore di esagerazione delle quote)
#% required : no
#%end

#%option
#% key: griglia
#% type: integer
#% answer: 100
#% description: (passo della griglia x,y)
#% required : no
#%end

#-------------Input testuale metadato-------------
#%option
#% key: meta
#% type: string
#% answer: 
#% description: (file con metadati della sezione)
#% gisprompt: new_file,file,input
#% required : no
#%end


if [ -z "$GISBASE" ] ; then
    echo "You must be in GRASS GIS to run this program."
    exit 1
fi

if [ "$1" != "@ARGS_PARSED@" ] ; then
    exec g.parser "$0" "$@"
fi

DEM=$GIS_OPT_DEM
OUT2=$GIS_OPT_OUT2
grass_vect=$GIS_OPT_GRASS_VECT
dxf_vect=$GIS_OPT_DXF_VECT
percorso_dxf=$GIS_OPT_PERCORSO_DXF
cella=$GIS_OPT_CELLA
OUT=$GIS_OPT_OUT
meta=$GIS_OPT_META
fattore=$GIS_OPT_FATTORE
griglia=$GIS_OPT_GRIGLIA


if [ -z "$cella" ] ; then
cella=1;echo -n "Risoluzione del raster (Dimensioni del lato della cella)= $cella metri"  
fi

g.region res=$cella

#Punti della sezione (linea) tramite la quale si calcolano i valori di giacitura del piano
xmessage '  INSERISCI 2 PUNTI PER INDIVIDUARE LA TRACCIA DI SEZIONE  ' 
d.what.rast -t  >> punti_sezione

cat punti_sezione | grep -v " " > punti_sezione_corretti   
N_punti_corretti=` cat punti_sezione_corretti | wc -l`

z=$(($N_punti_corretti/2))
#----------------------------------------------------------------------------------
#ciclo per ottenere la X e la Y dei due punti individuati
#----------------------------------------------------------------------------------
for ((x=1; x<=$z; x++)) do
	#creazione di un file di estrapolazione dati corretto (cioe' senza linee vuote)
	b=$(($x*2))  
	cat punti_sezione_corretti | sed 's/:/ /g' | awk -F " " '( NR == '$b' ) { print $1, $2 }' >> XY_PUNTI_FINALE
done
#----------------------------------------------------------------------------------
#ciclo per ottenere la Z dei due punti individuati
#----------------------------------------------------------------------------------
cat punti_sezione | grep  actual | sed 's/,/ /g' | sed 's/:/ /g' > z_punti_sezione_corretti
NR_Z=` cat z_punti_sezione_corretti | wc -l`

for ((x=1; x<=$NR_Z; x++)) do
	cat z_punti_sezione_corretti | awk -F " " '( NR == '$x' ) { print $3 }' >> Z_PUNTI_FINALE
done
#----------------------------------------------------------------------------------
#rimozione di alcuni files testuali
rm punti_sezione punti_sezione_corretti z_punti_sezione_corretti

#costruzione del file ascii da importare per la visualizzazione
echo "ORGANIZATION:" > OUT3
echo "DIGIT DATE:" >> OUT3
echo "DIGIT NAME:" >> OUT3
echo "MAP NAME:" >> OUT3
echo "MAP DATE:" >> OUT3
echo "MAP SCALE:" >> OUT3
echo "OTHER INFO:" >> OUT3
echo "ZONE:" >> OUT3
echo "MAP THRESH:" >> OUT3
echo "VERTI:" >> OUT3

X1=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 1 ) {print $1}'`
Y1=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 1 ) {print $2}'`
X2=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 2 ) {print $1}'`
Y2=` cat XY_PUNTI_FINALE | awk -F " " '( NR == 2 ) {print $2}'`
Z1=` cat Z_PUNTI_FINALE | awk -F " " '( NR == 1 ) {print $1}'`
Z2=` cat Z_PUNTI_FINALE | awk -F " " '( NR == 2 ) {print $1}'`

#echo "L  2" >> OUT3
echo L  2 1 >> OUT3
echo " $X1 $Y1" >> OUT3
echo " $X2 $Y2" >> OUT3
echo " 1     1         " >> OUT3 


#importazione del file ascii creato per la creazione della linea di sezione a monitor
v.in.ascii input=OUT3 output=$grass_vect format=standard #fs=| skip=0 x=1 y=2 z=0 cat=0 
#stampa sul monitor
d.mon select=x0
d.vect map=$grass_vect type=point,line,boundary,centroid,area,face display=shape icon=basic/x size=8 layer=1 width=0 wscale=1 color=black fcolor=200:200:200 rgb_column=GRASSRGB llayer=1 lcolor=red bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center 


#creazione della coppia di coordinate per r.profile
XY=` echo "$X1,$Y1,$X2,$Y2"`
echo "coppia di coordinate $XY"
#r.profile con immissione delle coordinate degli estremi
r.profile input=$DEM output=OUT profile=$XY null=* 

NP=` cat OUT | wc -l`

#formattazione del file ascii "distanze-quote"
echo ORGANIZATION: > $OUT2
echo DIGIT DATE:   >> $OUT2
echo DIGIT NAME:   >> $OUT2
echo MAP NAME:     >> $OUT2
echo MAP DATE:     >> $OUT2
echo MAP SCALE:    >> $OUT2
echo OTHER INFO:   >> $OUT2
echo ZONE:         >> $OUT2
echo MAP THRESH:   >> $OUT2
echo VERTI:        >> $OUT2


echo L  $NP 1 >> $OUT2

#routine per l'esagerazione delle quote
for ((x=1; x<=$NP; x++)) do
H=` cat OUT | awk -F " " '( NR == '$x' ) { print $2 }'` 
Hf=$(echo "scale=1; ($H * $fattore)" | bc -l)
echo "$Hf" >> H_fattore
done
#estrazione distanze
cat OUT | awk -F " " '{ print $1 }' > PROGRESSIVE

paste -d " " PROGRESSIVE H_fattore > OUT_H

cat OUT_H | awk -F " " '{ print " " $0 }' >> $OUT2 
echo " 1     1         " >> $OUT2 

#trasformazione in vettoriale grass
#v.in.ascii input=$percorso_ascii/$OUT2 output=Profilo_sezione format=standard skip=0 x=1 y=2 z=0 cat=0 
v.in.ascii input=$OUT2 output=sezione$grass_vect format=standard skip=0 x=1 y=2 z=0 cat=0 

#Esportazione della sezione in DXF
#v.out.dxf input=sezione$grass_vect output="$percorso_dxf""$dxf_vect".dxf
rm OUT OUT3 OUT_H PROGRESSIVE H_fattore
rm $OUT2
rm XY_PUNTI_FINALE Z_PUNTI_FINALE


#stampa a monitor del profilo di sezione
d.mon start=x1
g.region vect=sezione$grass_vect
d.vect map=sezione$grass_vect
d.grid size=$griglia origin=0,0  color=170:170:170 bordercolor=0:0:0
echo Profilo $dxf_vect | d.text color=0:0:0 size=3  at=33,95
echo Fattore scala verticale x $fattore | d.text color=0:0:0 size=3  at=33,90


################################# OPERAZIONI DI REALIZZAZIONE DELLA GRIGLIA PER L'ESPORTAZIONE DXF #################################

#ricerca del valore minimo e massimo delle quote
g.region -g > region_sez

n=` cat region_sez | awk -F "=" '( NR == 1 ) { print $2 }'`
s=` cat region_sez | awk -F "=" '( NR == 2 ) { print $2 }'`
w=` cat region_sez | awk -F "=" '( NR == 3 ) { print $2 }'`
e=` cat region_sez | awk -F "=" '( NR == 4 ) { print $2 }'`
rm region_sez
echo "Y massimo = $n"
echo "Y minimo = $s"
echo "X minimo = $w"
echo "X massimo = $e"

e_w=$(echo "scale=1; ($e - $w)" | bc -l) # ampiezza asse X
n_s=$(echo "scale=1; ($n - $s)" | bc -l) # ampiezza asse Y
echo "ampiezza X = $e_w"
echo "ampiezza Y = $n_s"

#numero di suddivisioni
suddX=$(echo "scale=0; ($e_w / $griglia)" | bc -l) # numero linee Y - DEFINIRE VARIABILE "$passoX"
suddY=$(echo "scale=0; ($n_s / $griglia)" | bc -l) # numero linee X - DEFINIRE VARIABILE "$passoY"
echo "numero linee X = $suddY"
echo "numero linee Y = $suddX"

#PROVIAMO A FORZARE LA COORDINATA DI ORIGINE COME 0 (ZERO)
w=0


# DEFINIZIONE  "lineaY" (ORIZZONTALE)
echo ORGANIZATION: > lineaY 
echo DIGIT DATE:   >> lineaY
echo DIGIT NAME:   >> lineaY
echo MAP NAME:     >> lineaY
echo MAP DATE:     >> lineaY
echo MAP SCALE:    >> lineaY
echo OTHER INFO:   >> lineaY
echo ZONE:         >> lineaY
echo MAP THRESH:   >> lineaY
echo VERTI:        >> lineaY

	for ((a=1; a<=$suddY + 1; a++)) do
		if [[ $a == 1 ]]; then
			echo L  2 1 >> lineaY # L=linea 2= numero di punti
			echo " $w $s" >> lineaY
			echo " $e $s" >> lineaY
			s_mod_abs=$(echo "scale=0; ($s / 1)" | bc -l)
			echo " 1     $s_mod_abs         " >> lineaY # Il secondo valore è la categoria
		else
			echo L  2 1 >> lineaY # L=linea 2= numero di punti			
			s_mod=$(echo "scale=1; ($s + ($griglia * ($a - 1)))" | bc -l)
			echo " $w $s_mod" >> lineaY
			echo " $e $s_mod" >> lineaY
			s_mod_abs=$(echo "scale=0; ($s_mod / 1)" | bc -l)
			echo " 1     $s_mod_abs         " >> lineaY #####CATEGORIE (per fare poi la label)#####
		fi
	done


# DEFINIZIONE  "lineaX" (VERTICALE)
echo ORGANIZATION: > lineaX 
echo DIGIT DATE:   >> lineaX
echo DIGIT NAME:   >> lineaX
echo MAP NAME:     >> lineaX
echo MAP DATE:     >> lineaX
echo MAP SCALE:    >> lineaX
echo OTHER INFO:   >> lineaX
echo ZONE:         >> lineaX
echo MAP THRESH:   >> lineaX
echo VERTI:        >> lineaX

	for ((a=1; a<=$suddX + 1; a++)) do
		if [[ $a == 1 ]]; then
			echo L  2 1 >> lineaX # L=linea 2= numero di punti
			echo " $w $s" >> lineaX
			echo " $w $n" >> lineaX
			echo " 1     0         " >> lineaX # Il secondo valore è la categoria
		else
			w_mod=$(echo "scale=1; ($w + ($griglia * ($a - 1)))" | bc -l)
			echo L  2 1 >> lineaX # L=linea 2= numero di punti			
			echo " $w_mod $s" >> lineaX
			echo " $w_mod $n" >> lineaX
			w_mod_abs=$(echo "scale=0; ($w_mod / 1)" | bc -l)
			echo " 1     $w_mod_abs         " >> lineaX #####CATEGORIE (per fare poi la label)#####
		fi
	done

#------------------------------------------------------------------------------
#creazione lineaX una alla volta per fare i punti d'intersezione con la sezione
	for ((a=1; a<=$suddX + 1; a++)) do

echo ORGANIZATION: > lineaX$a 
echo DIGIT DATE:   >> lineaX$a
echo DIGIT NAME:   >> lineaX$a
echo MAP NAME:     >> lineaX$a
echo MAP DATE:     >> lineaX$a
echo MAP SCALE:    >> lineaX$a
echo OTHER INFO:   >> lineaX$a
echo ZONE:         >> lineaX$a
echo MAP THRESH:   >> lineaX$a
echo VERTI:        >> lineaX$a

		if [[ $a == 1 ]]; then
			echo L  2 1 >> lineaX$a # L=linea 2= numero di punti
			echo " $w $s" >> lineaX$a
			echo " $w $n" >> lineaX$a
			echo " 1     1         " >> lineaX # Il secondo valore è la categoria
		else
			w_mod=$(echo "scale=1; ($w + ($griglia * ($a - 1)))" | bc -l)
			echo L  2 1 >> lineaX$a # L=linea 2= numero di punti			
			echo " $w_mod $s" >> lineaX$a
			echo " $w_mod $n" >> lineaX$a
#			w_mod_abs=$(echo "scale=0; ($w_mod / 1)" | bc -l)
			echo " 1     1         " >> lineaX$a #####CATEGORIE (per fare poi la label)#####
		fi
		
	#Procedura per importare in formato vettoriale la griglia verticale, trasformarla in raster e combinarla con la sezione raster
	v.in.ascii input=$HOME/lineaX$a output=lineaX$a format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite 
	v.to.rast input=lineaX$a output=lineaX$a use=cat layer=1 value=1 rows=4096 --overwrite 
	v.to.rast input=sezione$grass_vect output=sezione$grass_vect use=cat layer=1 value=1 rows=4096 --overwrite
	#r.patch input=lineaX$a,sezione$grass_vect output=ab$a --overwrite 
	
	
	r.mapcalc "S$a = (lineaX$a + sezione$grass_vect)" #somma di mappe con cat=1
	r.mapcalc "C$a=if(S$a == 2,1,null())" #viene attribuita cat=2 alle celle cat=2 ed alle altre null
	
	r.to.vect -v input=C$a output=C$a feature=point --overwrite #trasformazione da raster a vettore (punto)
	v.out.ascii input=C$a format=point > C$a #scrittura su file di testo degli attributi del punto (coordinate e categoria)
	
	Q=` cat C$a | awk -F "|" '( NR == 1 ) { print $2 }'` #estrazione della variabile che descrive la coordinata nord (in questo caso la quota-ordinata)
	X=` cat C$a | awk -F "|" '( NR == 1 ) { print $1 }'` #estrazione della variabile che descrive la coordinata est (in questo caso l'ascissa)

	#creazione delle coordinate del file puntuale ascii con categoria=quota
	
		if [[ $a == 1 ]]; then
			echo P  1 1 >> /dev/null # L=linea 2= numero di punti
			echo " $X $Q" >> /dev/null
			Qr=$(echo "scale=1; ($Q / $fattore)" | bc -l)
			echo " 1     $Qr         " >> /dev/null # Il secondo valore è la categoria
		else
			echo P  1 1 >> quotesezioni # L=linea 2= numero di punti
			echo " $X $Q" >> quotesezioni
			Qr=$(echo "scale=1; ($Q / $fattore)" | bc -l)
			echo " 1     $Qr         " >> quotesezioni # Il secondo valore è la categoria
			
		fi
	
	rm lineaX$a C$a
	g.remove vect=lineaX$a,C$a rast=lineaX$a,S$a,C$a
	done

#formattazione del file 
echo ORGANIZATION: > quotesezioni2
echo DIGIT DATE:   >> quotesezioni2
echo DIGIT NAME:   >> quotesezioni2
echo MAP NAME:     >> quotesezioni2
echo MAP DATE:     >> quotesezioni2
echo MAP SCALE:    >> quotesezioni2
echo OTHER INFO:   >> quotesezioni2
echo ZONE:         >> quotesezioni2
echo MAP THRESH:   >> quotesezioni2
echo VERTI:        >> quotesezioni2
cat quotesezioni >> quotesezioni2

	

g.remove rast=sezione$grass_vect
rm quotesezioni 
#------------------------------------------------------------------------------


# DEFINIZIONE  "lineaY secondaria" (ORIZZONTALE)
echo ORGANIZATION: > lineaYs 
echo DIGIT DATE:   >> lineaYs
echo DIGIT NAME:   >> lineaYs
echo MAP NAME:     >> lineaYs
echo MAP DATE:     >> lineaYs
echo MAP SCALE:    >> lineaYs
echo OTHER INFO:   >> lineaYs
echo ZONE:         >> lineaYs
echo MAP THRESH:   >> lineaYs
echo VERTI:        >> lineaYs
#griglia secondaria più corta e più fitta
suddYs=$(echo "scale=0; (($suddY + 1)  * 10)" | bc -l) #suddivisione della griglia principale
ec=$(echo "scale=0; ($e / 150)" | bc -l) #riduzione della lunghezza della linea di griglia
	for ((a=1; a<=$suddYs; a++)) do
		if [[ $a == 1 ]]; then
			echo L  2 1 >> lineaYs # L=linea 2= numero di punti
			echo " $w $s" >> lineaYs
			echo " $ec $s" >> lineaYs
			s_mod_abs=$(echo "scale=0; ($s / 10)" | bc -l)
			echo " 1     $s_mod_abs         " >> lineaYs # Il secondo valore è la categoria
		else
			echo L  2 1 >> lineaYs # L=linea 2= numero di punti			
			s_mod=$(echo "scale=1; ($s + (($griglia / 10) * ($a - 1)))" | bc -l)
			echo " $w $s_mod" >> lineaYs
			echo " $ec $s_mod" >> lineaYs
			s_mod_abs=$(echo "scale=0; ($s_mod / 10)" | bc -l)
			echo " 1     $s_mod_abs         " >> lineaYs #####CATEGORIE (per fare poi la label)#####
		fi
	done

# DEFINIZIONE  "lineaX secondaria" (VERTICALE)
echo ORGANIZATION: > lineaXs 
echo DIGIT DATE:   >> lineaXs
echo DIGIT NAME:   >> lineaXs
echo MAP NAME:     >> lineaXs
echo MAP DATE:     >> lineaXs
echo MAP SCALE:    >> lineaXs
echo OTHER INFO:   >> lineaXs
echo ZONE:         >> lineaXs
echo MAP THRESH:   >> lineaXs
echo VERTI:        >> lineaXs
#griglia secondaria più corta e più fitta
suddXs=$(echo "scale=0; (($suddX + 1)  * 10)" | bc -l) #suddivisione della griglia principale
np=$(echo "scale=0; ($n / 100)" | bc -l) #riduzione della lunghezza della linea di griglia
nc=$(echo "scale=1; ($np + $s)" | bc -l) #riduzione della lunghezza della linea di griglia
	for ((a=1; a<=$suddXs; a++)) do
		if [[ $a == 1 ]]; then
			echo L  2 1 >> lineaXs # L=linea 2= numero di punti
			echo " $w $s" >> lineaXs
			echo " $w $nc" >> lineaXs
			echo " 1     0         " >> lineaXs # Il secondo valore è la categoria
		else
			w_mod=$(echo "scale=1; ($w + (($griglia / 10) * ($a - 1)))" | bc -l)
			echo L  2 1 >> lineaXs # L=linea 2= numero di punti			
			echo " $w_mod $s" >> lineaXs
			echo " $w_mod $nc" >> lineaXs
			w_mod_abs=$(echo "scale=0; ($w_mod / 10)" | bc -l)
			echo " 1     $w_mod_abs         " >> lineaXs #####CATEGORIE (per fare poi la label)#####
		fi
	done

# DEFINIZIONE  "puntiY" (ORIZZONTALE)
echo ORGANIZATION: > puntiY 
echo DIGIT DATE:   >> puntiY
echo DIGIT NAME:   >> puntiY
echo MAP NAME:     >> puntiY
echo MAP DATE:     >> puntiY
echo MAP SCALE:    >> puntiY
echo OTHER INFO:   >> puntiY
echo ZONE:         >> puntiY
echo MAP THRESH:   >> puntiY
echo VERTI:        >> puntiY

	for ((a=1; a<=$suddY + 1; a++)) do
		if [[ $a == 1 ]]; then
			echo P  1 1 >> puntiY # L=linea 2= numero di punti
			dw=$(echo "scale=0; ($w - 10)" | bc -l) #spostamento a sinistra delle label quote
			echo " $dw $s" >> puntiY
			s_mod_abs_2=$(echo "scale=0; ($s / $fattore)" | bc -l) #riscalatura delle quote ai valori reali
			echo " 1     $s_mod_abs_2         " >> puntiY # Il secondo valore è la categoria
		else
			echo P  1 1 >> puntiY # L=linea 2= numero di punti			
			s_mod=$(echo "scale=1; ($s + ($griglia * ($a - 1)))" | bc -l)
			dw=$(echo "scale=0; ($w - 10)" | bc -l) #spostamento a sinistra delle label quote
			echo " $dw $s_mod" >> puntiY
			s_mod_abs_2=$(echo "scale=0; ($s_mod / $fattore)" | bc -l) #riscalatura delle quote ai valori reali
			echo " 1     $s_mod_abs_2         " >> puntiY #####CATEGORIE (per fare poi la label)#####
		fi
	done

# DEFINIZIONE  "puntiX" (VERTICALE)
echo ORGANIZATION: > puntiX 
echo DIGIT DATE:   >> puntiX
echo DIGIT NAME:   >> puntiX
echo MAP NAME:     >> puntiX
echo MAP DATE:     >> puntiX
echo MAP SCALE:    >> puntiX
echo OTHER INFO:   >> puntiX
echo ZONE:         >> puntiX
echo MAP THRESH:   >> puntiX
echo VERTI:        >> puntiX

	for ((a=1; a<=$suddX + 1; a++)) do
		if [[ $a == 1 ]]; then
			echo P  1 1 >> puntiX # L=linea 2= numero di punti
			ds=$(echo "scale=0; ($s - 10)" | bc -l) #spostamento in basso delle label progressive
			echo " $w $ds" >> puntiX
			echo " 1     0         " >> puntiX # Il secondo valore è la categoria
		else
			w_mod=$(echo "scale=1; ($w + ($griglia * ($a - 1)))" | bc -l)
			echo P  1 1 >> puntiX # L=linea 2= numero di punti
			ds=$(echo "scale=0; ($s - 10)" | bc -l) #spostamento in basso delle label progressive
			echo " $w_mod $ds" >> puntiX
			w_mod_abs_2=$(echo "scale=0; ($w_mod / 1)" | bc -l)
			echo " 1     $w_mod_abs_2         " >> puntiX #####CATEGORIE (per fare poi la label)#####
		fi
	done

######CREAZIONE ASCISSA E ORDINATA SINGOLE PER IL SISTEMA DI RIFERIMENTO LINEARE
#ascissa
echo ORGANIZATION: > ascissa
echo DIGIT DATE:   >> ascissa
echo DIGIT NAME:   >> ascissa
echo MAP NAME:     >> ascissa
echo MAP DATE:     >> ascissa
echo MAP SCALE:    >> ascissa
echo OTHER INFO:   >> ascissa
echo ZONE:         >> ascissa
echo MAP THRESH:   >> ascissa
echo VERTI:        >> ascissa
echo L  2 1 >> ascissa
echo " $w $s" >> ascissa
echo " $e $s" >> ascissa
echo " 1     0         " >> ascissa
#ordinata
echo ORGANIZATION: > ordinata
echo DIGIT DATE:   >> ordinata
echo DIGIT NAME:   >> ordinata
echo MAP NAME:     >> ordinata
echo MAP DATE:     >> ordinata
echo MAP SCALE:    >> ordinata
echo OTHER INFO:   >> ordinata
echo ZONE:         >> ordinata
echo MAP THRESH:   >> ordinata
echo VERTI:        >> ordinata
echo L  2 1 >> ordinata
echo " $w $s" >> ordinata
echo " $w $n" >> ordinata
echo " 1     0         " >> ordinata
#####################

#trasformazione da ascii a vettoriale Grass
v.in.ascii input=$HOME/lineaY output=lineaY format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite 
v.in.ascii input=$HOME/lineaX output=lineaX format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite 
v.in.ascii input=$HOME/puntiY output=puntiY format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite 
v.in.ascii input=$HOME/puntiX output=puntiX format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite 
v.in.ascii input=$HOME/ascissa output=ascissa format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite
v.in.ascii input=$HOME/ordinata output=ordinata format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite
v.in.ascii input=$HOME/lineaYs output=lineaYs format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite
v.in.ascii input=$HOME/lineaXs output=lineaXs format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite
v.in.ascii input=$HOME/quotesezioni2 output=quotesezioni2 format=standard fs=" " skip=0 x=1 y=2 z=0 cat=0 --overwrite

#creazione della table del database in base ai valori di categoria
v.db.addtable map=lineaX layer=1 'columns=cat integer' 
v.db.addtable map=lineaY layer=1 'columns=cat integer' 
v.db.addtable map=puntiX layer=1 'columns=cat integer' 
v.db.addtable map=puntiY layer=1 'columns=cat integer' 
v.db.addtable map=ascissa layer=1 'columns=cat integer'
v.db.addtable map=ordinata layer=1 'columns=cat integer'
v.db.addtable map=lineaYs layer=1 'columns=cat integer'
v.db.addtable map=lineaXs layer=1 'columns=cat integer'
v.db.addtable map=quotesezioni2 layer=1 'columns=cat integer'

v.db.addtable map=sezione$grass_vect layer=1 'columns=cat integer'

#creazione delle labels
#v.label map=lineaX type=point,line,boundary,centroid layer=1 column=cat labels=lineaX_label xoffset=0 yoffset=0 reference=center font=standard size=5 color=black rotation=0 width=1 hcolor=none hwidth=0 background=none border=none opaque=yes 


#stampa a monitor
d.mon start=x2
g.region vect=sezione$grass_vect
d.vect map=sezione$grass_vect
d.vect map=lineaY
d.vect map=lineaX
d.vect map=puntiY
d.vect map=puntiX
d.vect map=lineaYs
d.vect map=lineaXs

#d.labels labels=lineaX_label

#--------------Unione dei files (sezione, griglia, punti coordinate)---------------
v.patch input=sezione$grass_vect,lineaX,lineaY,lineaYs,lineaXs,puntiX,puntiY,quotesezioni2 output="$dxf_vect"_grafico --overwrite 
v.db.addtable map="$dxf_vect"_grafico layer=1 'columns=cat integer'

#--------------Esportazione dei files patchati in DXF--------------
v.out.dxf input="$dxf_vect"_grafico output="$percorso_dxf""$dxf_vect".dxf

##########################################

#ripristino monitor e regione iniziali
d.mon select=x0
g.region rast=$DEM

#metadati della sezione
v.info -h map=sezione$grass_vect layer=1 > metad

echo "----------------------------METADATI DELLA SEZIONE----------------------------" > $meta
echo " " >> $meta
echo "Nome del file vettoriale di Grass salvato (Traccia della sezione): $grass_vect" >> $meta
echo "Nome del file vettoriale .dxf esportato (Profilo di sezione): $dxf_vect" >> $meta
echo "Directory di esportazione del file .dxf: $percorso_dxf" >> $meta
echo " " >> $meta
echo "GIS enviroment:" >> $meta
cat metad | awk '(NR > 1) { print $0 }' >> $meta
echo " " >> $meta
echo "Coordinate e quota degli estremi della sezione" >> $meta
echo "X1,Y1,Z1 = $X1,$Y1,$Z1" >> $meta
echo "X2,Y2,Z2 = $X2,$Y2,$Z2" >> $meta
echo " " >> $meta
H=$(echo "scale=1; $Z1 - $Z2" | bc -l)
echo "Differenza di quota tra gli estremi della sezione A-B: $H metri" >> $meta
echo " " >> $meta
dX=$(echo "scale=1; $X1 - $X2" | bc -l)
dY=$(echo "scale=1; $Y1 - $Y2" | bc -l)
L=$(echo "scale=1; sqrt($dX * $dX + $dY * $dY)" | bc -l)
echo "Lunghezza della sezione: $L metri" >> $meta
echo " " >> $meta
echo "Fattore di esagerazione della scala verticale: $fattore" >> $meta
#--------------------------------------------------------------------------------
#Output a terminale
echo "Coordinate e quota degli estremi della sezione" 
echo "X1,Y1,Z1 = $X1,$Y1,$Z1" 
echo "X2,Y2,Z2 = $X2,$Y2,$Z2" 
echo "Differenza di quota tra gli estremi della sezione A-B: $H metri"
echo "Lunghezza della sezione: $L metri"
echo "Nome del file vettoriale di Grass salvato (Traccia della sezione): $grass_vect"
echo "Nome del file vettoriale .dxf esportato (Profilo di sezione): $dxf_vect"
echo "Directory di esportazione del file .dxf: $percorso_dxf"
echo "Fattore di esagerazione della scala verticale: $fattore"

#RIMOZIONE FILES
rm metad
g.remove vect=sezionesezione1,sezione1_grafico,puntiY,puntiX,ordinata,lineaY,lineaX,ascissa,lineaYs,lineaXs,quotesezioni2
#g.remove vect=sezione1
rm puntiY puntiX ascissa ordinata lineaX lineaY lineaXs lineaYs 
#g.remove vect=sezione$grass_vect, #Profilo_sezione
g.remove vect=lineaY
g.remove vect=lineaX
#fine




More information about the grass-user mailing list