[GRASS-user] esportare punti 3d a paritre da cdl

Massimo Di Stefano massimodisasha at yahoo.it
Fri Feb 23 13:38:57 EST 2007


Ciao,

ho una questione da risolvere, vi spiego:

premetto che
il mio obbiettivo è di ricavare un file di testo tipo :

X	Y	Z
..
..
a partire da un file di curve di livello.

sicuramente mi sto affannando per nulla, magari esiste un sistema  
semplice semplice che con due righe mi risolve il problema....
...
ma nel frattempo
io ci sto provando  :

a partire dal file di curve di livello, lo trasformo in punti
tramite "vector to vector"

"se interrogato risulta ancora collegato al dbf delle curve di  
livello" :
generico d.what.vect mi da :

East: 2524748.55219
North: 4509851.42641
Map: out
Mapset: cdl2
Point

Layer: 1
Category: 657
driver: dbf
database: /Users/epifanio/Documents/grassdata/salerno/cdl2/dbf/
table: out_1
key column: cat
cat : 657
FID_ :
Entity : Polyline
Handle : 2960B
Layer : 05.01-Curva dir.
Color : 4
Linetype : Continuous
Elevation : 725
Thickness : 0
Text :
Layer: 2
Category: 6415
driver: dbf
database: /Users/epifanio/Documents/grassdata/salerno/cdl2/dbf/
table: out_2
key column: cat
cat : 6415
lcat : 657
along : 3967.424662

decido di esportare il file di punti con:
v.out.ascii
noto che mi esporta le coordinate  Est e Nord  ed il cat ....  ma non  
gli attributi :-(

il file di export è del tipo :

2524464.205 4510655.961 1
2524459.58400078 4510657.39162497 1
2524455.06343952 4510658.51987919 1
2524454.4559001 4510662.2213528 1
2524458.4969279 4510663.26737144 1
2524462.17553609 4510660.29479857 1
2524464.205 4510655.961 1
2523634.473 4510605.156 2
2523636.36678512 4510609.62505364 2
2523638.93617648 4510613.75929112 2
2523641.48038258 4510617.90730795 2
...
...
2523837.081489 4508421.86860594 913
2523841.77492321 4508423.51461687 913
2523846.45768689 4508425.19030463 913
2523850.96811371 4508427.25524908 913
2523855.46731962 4508429.36566738 913
2523860.02059782 4508431.36683469 913
2523864.53819442 4508433.44750418 913
2523869.16988716 4508435.23216124 913
2523873.9152734 4508436.72185049 913
2523878.84059243 4508437.33824915 913
2523883.80484724 4508437.20891746 913
2523888.71571044 4508436.45537197 913
2523893.59133563 4508435.47244594 913
2523898.546 4508435.162 913


da notare che il "cat" viene ripetuto per punti diversi.....

la questione è come associare l'attributo "elevation"
al file ascii che ho generato.....
allora tramite il comando :
  v.to.db -p map=nome_vettore type=line layer=1 qlayer=1 option=query  
column=elevation qcolumn=elevation > text.file

mi genero un file come questo :

cat|query
1|            680
2|            600
3|            640
4|            550
5|            590
6|           1010
7|           1015
8|            955
9|            955
10|            935
11|            950
12|            955
...
...
...
900|            585
901|            580
902|            570
903|            565
904|            560
905|            555
906|            530
907|            545
908|            540
909|            535
910|            530
911|            540
912|            545
913|            535

da questi export noto che ad ogni "cat" è associata un altezza ben  
precisa


ora la mia domanda è :

avete un idea su come usare sed-awk-gawk-perl o altro ... per :
associare ad ogni punto la giusta altezza ?
sarà un po macchinoso ma di sicuro si può fare,
sono un newbie con la bash.... e mi trovo in difficoltà

  al cat presente nell'export di v.out.ascii corrisponde l'altezza  
individuata da  v.to.db

come riuscire a creare una colonna delle altezze...(che consideri  
tutti i punti)?

  es: primo valore della colonna "elevation" replicato tante volte  
quante volte viene replicato il cat=1
nel file generato da v.out.ascii
.....secondo valore "elevation" replicato tante volte quante vole  
viene relplicato il cat=2 nel file  "v.out.ascii"
e cosi via fino all'ultimo valore di cat...

sto vaneggiando, avete una soluzione?


a me basterebbe un file di testo con  una colonna delle altezze per  
ciascun punto
appartenente al file esportato con v.out.ascii.
una volta ottenuta la colonna delle altezze per ciascun punto e non  
per ciascun cat
potrei risolvere con :

gawk '{if(ARGIND==1){one[i++]=$1" "$2}else if(ARGIND==2 && $0 !~ /^#/) 
{two[j++]=$1}} END{for(i in one)print one[i],two[i]}' file1 file2

per fare il merge dei due file...X Y presi da v.out.ascii  e Z la  
colonna incriminata

altro metodo sarebbe far fare a GRASS un ciclo di "v.what.vect" per  
ciascuno dei punti
() e memorizzare il valore elevation;  ... idee ?
oppure rasterizzare le curve e fare un r.what .rast ?

scusate per la lunga mail :-)
spero di poter risolvere !

Massimo.






More information about the grass-user mailing list