preparazione dati mediante geoprocessing File
Transcript
preparazione dati mediante geoprocessing File
Esercitazione Preparazione dei dati per l'analisi di reti con GRASS utilizzando comandi di gestione db e geoprocessing vettoriale (Dati: parte del dataset North Carolina) In collaborazione con Prof. P. Zatelli Dipartimento di Ingegneria Civile ed Ambientale Università degli Studi di Trento Cartografia numerica e GIS Scopo dell'esercitazione di analisi di rete: predisporre una cartografia di aiuto all'intervento di squadre di spegnimento incendi sull'area del dataset North Carolina. Dati: strade – linee vettoriali localizzazione di incendi e caserme dei pompieri – punti vettoriali La rete delle strade è già presente nel dataset North Carolina come file vettoriale streets nel mapset PERMANENT ma, poichè le operazioni per l'analisi di reti possono essere onerose e la rete stradale è molto estesa, conviene estrarre un sottoinsieme delle strade su una regione limitata per avere tempi di elaborazione brevi. Si imposta la regione sulla regione già esistente central_10m: > g.region region=central_10m@PERMANENT Si crea un area rettangolare region_central che si userà per ritagliare la parte di rete stradale interna a questa regione: > v.in.region --overwrite --verbose output=region_central e si ritaglia la rete stradale, creando la mappa streets_central: > v.overlay --overwrite --verbose ainput=streets@PERMANENT atype=line binput=region_central output=streets_central operator=and Analogo discorso vale per i punti che rappresentano le caserme dei pompieri, contenuti nella mappa firestations nel mapset PERMANENT: si estraggono i punti che ricadono nella regione centrale e tra questi si selezionano le caserme della città di Raleigh che forniscono servizi di soccorso. Si estraggono i punti della mappa firestations nella regione central_10m: > v.select --overwrite --verbose ainput=firestations atype=point binput=region_central btype=area output=firestations_central creando la mappa firestations_central. Tra queste si selezionano le stazioni della città di Raleigh (colonna della tabella CITY='Raleigh') che forniscono servizi di soccorso (colonna RESCUE_SER>0): > v.extract --overwrite --verbose input=firestations_central output=firestations_raleigh where="CITY='Raleigh' and RESCUE_SER>0" La nuova mappa firestations_raleigh contiene quattro punti, come si può verificare con > v.info firestations_raleigh A questo punto è sufficente connettere i punti alla rete stradale con: > v.net --overwrite --verbose input=streets_central points=firestations_raleigh@user1 output=network operation=connect thresh=500 L'opzione operation=connect indica di creare i collegamenti tra punti (stazioni dei pompieri) e linee (strade) e di creare un unico vettoriale contenente punti, linee e collegamenti. Il parametro thresh=500 indica di connettere alla rete stradale i punti che distano da essa fino a 500 metri. La nuova mappa ha due layer (1 e 2): le linee hanno categorie sul primo layer, mentre i punti hanno categorie sul secondo layer, come si può verificare con > v.category input=network option=report Questa mappa ha collegata sul primo layer la tabella della mappa delle linee (strade), cioè streets_central, mentre nessuna tabella è collegata sul secondo layer: > v.db.connect -p map=network fornisce Vector map network@user1 is connected by: layer 1 table network in database /home/paolo/misc/grass/nc_basic_spm/gisdemo_ncspm/user1/dbf/ through driver dbf with key cat E' possibile collegare tabella delle stazioni dei pompieri sul secondo layer, ad esempio per poter visualizzare il nome della stazione ed i suoi attributi: > v.db.connect -o --verbose map=network table=firestations_central layer=2 Questo è possibile perchè le categorie delle caserme dei pompieri sul secondo layer della mappa streets_central sono le stesse delle caserme sul primo layer della mappa firestations_central. Costo di attraversamento Associamo ai vari tratti di strada un costo di attraversamento dipendente dalla distanza, con possibilità di “chiudere” alcune strade in uno o entrambi I sensi di percorrenza. Per fare questo si assegnano i costi di percorrenza per gli archi (strade) in una colonna della tabella associata. Le strade a cui corrsiponde un costo uguale a -1 sono considerate chiuse (in uno o entrambi i versi di percorrenza). Per mantenere come costo la distanza (per le strade che non saranno chiuse) si creano due nuove colonne, una per i costi in avanti (concordi con il verso della linea) ed una per i costi indietro (discordi con il verso della linea), e vi si scrive il valore della lunghezza del tratto di rete (linee) a cui corrispondono. Successivamente si porranno alcuni valori a -1 per chiudere alcune strade. Innanzitutto è necessario verificare che ogni linea abbia una categoria diversa, in modo da non assegnare la stessa lunghezza a due tratti diversi (che avranno quasi sicuramente lunghezze diverse): > v.category input=network option=report Layer/table: type point line boundary centroid area all Layer/table: type point line boundary centroid area all 1/network count 0 8827 0 0 0 8827 2/firestations_centr al count 4 0 0 0 0 4 min 0 1 0 0 0 1 max 0 8819 0 0 0 8819 min 21 0 0 0 0 21 max 52 0 0 0 0 52 Come si vede sopra le strade sono 8827 ma hanno 8819 categorie distinte sul primo layer: ci sono 8 strade con la stessa categoria. Si aggiunge quindi un terzo layer per le strade, su cui i tratti hanno categorie diverse, creando la mappa network_cat3: > v.category --overwrite --verbose input=network output=network_cat3 type=line layer=3 cat=1 Ora > v.category input=network_cat3 option=report Layer/table: 1/network_cat3_1 type count min max point 0 0 0 line 8827 1 8819 boundary 0 0 0 centroid 0 0 0 area 0 0 0 all 8827 1 8819 Layer: 3 type count point 0 line 8827 boundary 0 centroid 0 area 0 all 8827 min 0 1 0 0 0 1 max 0 8827 0 0 0 8827 Layer/table: 2/network_cat3_2 type count min max point 4 21 52 line 0 0 0 boundary 0 0 0 centroid 0 0 0 area 0 0 0 all 4 21 52 Si devono ricollegare le tabelle per questa nuova mappa. Sul layer 1 si connette la tabella delle strade: > v.db.connect -o --verbose map=network_cat3@user1 table=network layer=1 Sul layer 2 si collega la tabella delle stazioni dei pompieri: > v.db.connect -o --verbose map=network_cat3@user1 table=firestations_central layer=2 NOTA: in certi casi si deve ricreare la tabella firestations_central, poiché v.net, a causa di un bug, la cancella: > v.select --overwrite --verbose ainput=firestations atype=point binput=region_central btype=area output=firestations_central Si aggiunge quindi una tabella alla mappa, collegata sul terzo layer (la tabella sarà automaticamente chiamata network_cat3_3, per indicare che è la tabella del terzo layer della mappa network_cat3), con due colonne lungh_a e lungh_i per i costi di percorrenza in avanti ed indietro: > v.db.addtable --verbose map=network_cat3@user1 layer=3 columns="cat integer, lungh_a double, lungh_i double" Si scrivono le lunghezze nella nuova tabella, con costo avanti = costo indietro = lunghezza tratto. Sul terzo layer ogni tratto ha una categoria diversa quindi le due colonne contengono la lunghezza di ogni singolo tratto: > v.to.db --verbose map=network_cat3 type=line,boundary layer=3 qlayer=3 option=length columns=lungh_a > v.to.db --verbose map=network_cat3 type=line,boundary layer=3 qlayer=3 option=length columns=lungh_i Fine preparazione dati! Questa presentazione è © 2012 Bianca Federici e Domenico Sguerso, disponibile come http://www.creativecommons.it/Licenze
Documenti analoghi
Slides 2: queries, geoprocessing, proximity analysis and
(field “X”, field “Y”; format: “double”, precision: 12 / scale: 4).
- Right click on field X (and Y) / “calculate geometry” to extract longitude
and latitude of the centroid / export the table in ....