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