#!/bin/sh
# operazioni su linee e punti
# per GRASS 6.0/6.1
# C Paolo Zatelli 10/3/2006
# distribuibile sotto licenza GNU

eval `g.gisenv`
: ${GISDBASE?} ${LOCATION_NAME?} ${MAPSET?}
LOCATION="$GISDBASE/$LOCATION_NAME/$MAPSET"

# mette la regione a quella di default
g.region -d

# apre il monitor x0
d.mon start=x0

# cancella
d.erase

################## v.distance
# roads
d.vect map=roads@PERMANENT
# archsites
d.vect map=archsites@PERMANENT color=red size=6 icon=basic/pushpin

# calcola le distanze dalle strade dei punti di archsites e le visualizza
v.distance from=archsites@PERMANENT to=roads@PERMANENT from_type=point to_type=point,line,area from_layer=1 to_layer=1 dmax=-1 upload=dist column=dist -p 

echo "Premere invio per continuare"
read IN

# visualizza il tipo di strada piu' vicino a ciascun punto
v.distance from=archsites@PERMANENT to=roads@PERMANENT from_type=point to_type=point,line,area from_layer=1 to_layer=1 dmax=-1 upload=to_attr column=road_type to_column=label -p 

echo "Premere invio per continuare"
read IN

# crea il file archistes_to_roads con i segmenti di minima distanza fra archsites e strade
v.distance from=archsites@PERMANENT to=roads@PERMANENT output=archistes_to_roads from_type=point to_type=point,line,area from_layer=1 to_layer=1 dmax=-1 upload=dist column=dist -p --overwrite

d.vect archistes_to_roads color=green

echo "Premere invio per continuare"
read IN

# per i soli archsite nella foresta nazionale
# inserisco l'informzione nel DB
# aggiungo le colonne
# se esistono gia' db.execute da errore, ma si puo' ignorare
echo "ALTER TABLE archsites_natfor ADD COLUMN road_type varchar(30)" | db.execute
echo "ALTER TABLE archsites_natfor ADD COLUMN dist double" | db.execute

# aggiunge alla tabella degli archsites_natfor nella colonna "road_type" il tipo di strada piu' vicina
v.distance from=archsites_natfor to=roads@PERMANENT from_type=point to_type=point,line,area from_layer=1 to_layer=1 dmax=-1 upload=to_attr column=road_type to_column=label

# aggiunge alla tabella degli archsites_natfor nella colonna "dist" la distanza dalla strada piu' vicina
v.distance from=archsites_natfor to=roads@PERMANENT from_type=point to_type=point,line,area from_layer=1 to_layer=1 dmax=-1 upload=dist column=dist 

echo "select * from archsites_natfor"|db.select

echo "Premere invio per continuare"
read IN

################## v.to.points
d.erase
# railroads
d.vect map=railroads@PERMANENT

v.to.points input=railroads@PERMANENT type=point,line,boundary,centroid output=railroads_points llayer=1 dmax=1000 --overwrite

d.vect map=railroads_points color=red size=5 icon=basic/circle

echo "Premere invio per continuare"
read IN

# solo i vertici (cambi di direzione)
v.to.points input=railroads@PERMANENT type=point,line,boundary,centroid output=railroads_points llayer=1 dmax=1000 -v --overwrite

d.erase
d.vect railroads
d.vect map=railroads_points color=red size=5 icon=basic/circle

echo "Premere invio per continuare"
read IN

######### v.segment
# crea un punto con categoria 1 lungo la linea con categoria 1 a distanza 1000 dall'inizio della linea
# nb la connessione al DB e' persa
d.erase
d.vect railroads display=shape,dir,cat

echo "P 1 1 1000"|v.segment input=railroads@PERMANENT output=railroads_segment_point llayer=1 --overwrite

# crea un segmento con categoria 2 lungo la linea con categoria 1 con inizio a distanza 2000 dall'inizio della linea e fine a distanza 3000
echo "L 2 1 2000 3000"|v.segment input=railroads@PERMANENT output=railroads_segment_line llayer=1 --overwrite

d.vect map=railroads_segment_point color=red size=5 icon=basic/circle
d.vect map=railroads_segment_line color=green

echo "Premere invio per continuare"
read IN

# unisce le due mappe
v.patch input=railroads_segment_line,railroads_segment_point output=railroads_segment --overwrite

d.erase
d.vect railroads
d.vect map=railroads_segment color=red size=5 icon=basic/circle

echo "Premere invio per continuare"
read IN

########## v.split
# divide una linea in segmenti di lunghezza massima data
v.split input=railroads@PERMANENT output=railroads_split_lenght length=100 --overwrite

d.erase
d.vect railroads
d.vect map=railroads_split_lenght color=red

#d.what.vect

echo "Premere invio per continuare"
read IN

# numero di segmenti per ogni categoria
# prima
v.to.db map=railroads type=point,line,boundary,centroid layer=1 qlayer=1 option=count units=meters column=lenght -p 
# dopo
v.to.db map=railroads_split_lenght type=point,line,boundary,centroid layer=1 qlayer=1 option=count units=meters column=lenght -p 

echo "Premere invio per continuare"
read IN

# divide una linea in segmenti con un numero massimo di vertici (2=solo segmenti rettilinei)
# diminuendo il num. max di vertici il numero di segmenti aumenta
v.split input=railroads@PERMANENT output=railroads_split_num vertices=10 --overwrite

d.erase
d.vect railroads
d.vect map=railroads_split_num color=red

echo "Premere invio per continuare"
read IN

# numero di segmenti per ogni categoria
# prima
v.to.db map=railroads type=point,line,boundary,centroid layer=1 qlayer=1 option=count units=meters column=lenght -p 
# dopo
v.to.db map=railroads_split_num type=point,line,boundary,centroid layer=1 qlayer=1 option=count units=meters column=lenght -p 

# oppure si possono aggiungere categorie diverse per ogni segmento, sul secondo layer
v.category input=railroads_split_num output=railroads_split_num_cat type=point,line,boundary,centroid,area option=add cat=1 layer=2 step=1 --overwrite

# visualizza i segmenti 10, 11 e 12 in rosso, verde e blu
d.erase
d.vect map=railroads_split_num_cat layer=2 llayer=2 cats=3 color=red
d.vect map=railroads_split_num_cat layer=2 llayer=2 cats=4 color=green
d.vect map=railroads_split_num_cat layer=2 llayer=2 cats=5 color=blue

#echo "UPDATE railroads_split_lenght_cat_2 SET segment=1 WHERE cat=1" | db.execute

exit
echo " "
echo "Fine geoprocessing linee e punti"
echo " "

