[GRASS-user] (no subject)

Andrea Ricci livgr at supereva.it
Thu Mar 6 07:47:24 EST 2008


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
-------------- 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