[Gvsig_italian] R: Re: Calcolo distanza tra i vertici di un poligono

enricofiore a libero.it enricofiore a libero.it
Ven 11 Dic 2009 05:19:20 PST


Ciao,ho utilizzato il primo metodo metodo da te suggerito ed è andato tutto a buon fine.Grazie dell'aiuto.Segnalo solo alcune piccole variazioni che ho effettuato, per fare alcune prove (forse possono tornare utili):nel file batch [1] ho fatto in modo che oltre a numerare i file .shp in output, gli assegnasse un prefisso (es: codice ISTAT del comune di riferimento):for /L %% i in (1,1,70) do ogr2ogr -where "ID=%%i" CodISTAT_%%i.shp 001047V.shpHo fatto anche alcune piccole modifiche allo script da utilizzare con BeanShell, l'originale era:n=100; // numero di poligoni (e di layer)for (i=0; i<n; i++)    runalg("minimumenclosingpolygon", i + ".shp", "0", "1", "false", "#");1) ho impostato i=1 e i<=n; dato che la numerazione dei file partiva da 1 e per non perdermi un file di output;2) dato che il nome del file di input è composto da "codice ISTAT _ n°", ho modificato l'ultima riga in modo cheprendesse i file così nominati;2) al posto del "#"  ho inserito il percorso dove salvare il file e aggiungendo il contatore (+ i) in modo che numerasseanche gli output:l'ultima riga risulta così modificata:runalg ("minimumenclosingpolygon", "codice_" + i + ".shp", "0", "1", "false", "C:/Dati/nomefile_" + i)[1] https://gvsig.org/lists/pipermail/gvsig_italian/2009-November/000941.html

 

 

 

----Messaggio originale----Da: afalciano a yahoo.itData: 04/12/2009 23.11A: "enricofiore a libero.it"<enricofiore a libero.it>, "Lista di distribuzione in lingua italiana orientata sia agli utenti che agli sviluppatori"<gvsig_italian a lists.gvsig.org>Ogg: Re: [Gvsig_italian] Calcolo distanza tra i vertici di un poligonoenricofiore a libero.it ha scritto:> Ciao,> ho fatto alcune prove utilizzando i passaggi suggeriti:> 1) creo file di punti --> Nella tabella attributi è presente il campo> "Object" che identifica con un codice il poligono a cui essi appartengono> 2) calcolo della minima circonferenza circoscritta. E qui ho avuto dei> problemi.> Se cerco di fare disegnare un cerchio per ogni poligono presente nel> piano, selezionando lo shape file di punti, il campo Object della> tabella dello shape e spuntando l'opzione "Create one polygon for each> class" , il comando mi restituisce uno shape file vuoto. Se invece> seleziono i punti appartenenti ad un singolo poligono, il cerchio viene> creato.> > Sbaglio qualcosa o non è possibile fare disegnare i cerchi per tutti i> poligoni presenti nello shape file in un unico passaggio?> > Spero di essermi spiegato beneTi sei spiegato bene: purtroppo il tool e' bacato (inserito oggi nel bugtracker), non dipende da te. Nel frattempo, un modo per aggirare i varibug e risolvere comunque il problema consiste nel mettere a sistemaquesto recente post [1] con l'approccio della circonferenza minimacircoscritta, anche se l'intera procedura diventa un po' piu' articolata.Nel dettaglio, ripartendo dall'inizio:1) definisci un campo ID intero univoco nella tabella degli attributiassociata al layer dei poligoni;2) estrai i vertici dal layer dei poligoni ed esporta come shp;3) definisci un batch script per separare i vertici di ogni poligono [1]con ogr2ogr (v. esempio 1) ed eseguilo nella stessa cartella contenentelo shp dei vertici, otterrai n shp contenenti i vertici di ciascun poligono;4) tramite la console di Beanshell (linguaggio scripting di Sextante)calcola in maniera iterativa la circonferenza minima circoscritta adogni poligono (v. piu' in basso);5) esegui il merge di tutte le circonferenze in un unico shp;6) definisci e calcola un campo dei diametri come 2*sqrt(area()/pi());7) esegui l'unione (join) tra la tabella degli attributi dei poligoniiniziali e quella del layer delle circonferenze utilizzando l'ID deipoligoni, come campo in comune;8) esporta il layer precedentemente ottenuto;9) puoi calcolare finalmente l'UFI!######Con riferimento al punto 4), se i poligoni separati sono contenuti in{0,1,2,...,n}.shp ti bastera' adattare al tuo caso le seguentiistruzioni, sostituendo il numero dei poligoni:n=100; // numero di poligoni (e di layer)for (i=0; i<n; i++)    runalg("minimumenclosingpolygon", i + ".shp", "0", "1", "false", "#");... e compariranno a raffica tutte le circonferenze desiderate!######Ho provato velocemente l'intera procedura e posso assicurarti cheva a buon fine. Si tratta di un bel esercizio, molto utile a livellodidattico (...e non solo!), che spinge ad utilizzare la riga di comandodi Sextante. Buon lavoro!ciaoAntonio[1]https://gvsig.org/lists/pipermail/gvsig_italian/2009-November/000941.html-- Antonio Falcianohttp://www.linkedin.com/in/antoniofalciano
-------------- parte successiva --------------
Un allegato HTML  stato rimosso...
URL: <http://lists.osgeo.org/pipermail/gvsig-italian/attachments/20091211/acffbca0/attachment.html>


More information about the Gvsig_italian mailing list