Premetto come per ogni post su questo blog che quanto scrivo è frutto di tentativi e ricerche per risolvere un problema pratico che di volta in volta mi si presenta. Non è detto quindi che sia il modo migliore ed il più elegante; ogni feedback e/o consiglio è pertanto graditissimo.
Parto dall’inizio: dispongo di un grafo stradale (stradario comunale) archiviato in db Postgresql con estensione spaziale Postgis. La tabella contenente gli archi stradali si chiama “grafo_new”; in essa ogni arco di strada è spezzato all’intersezione con altri tratti. Questo comporta che una strada denomimata “Via Roma” sia composta da tanti archi. Inoltre il db contiene una griglia regolare di passo quadrato che identifica i quadranti del territorio comunale. Il problema da risolvere è: “Come faccio ad ottenere un elenco delle strade (in ordine alfabetico) che indichi anche il quadrante o i quadrantiall’interno dei quali la strada ricade”. Mi ricorda moltissimo il funzionamento della battaglia navale quando per colpire una nave avversaria di indicavano le coordinate: A7: acqua; B5: colpito; B6: colpito e affondato.
Un po’ come fa l’ottimo servizio maposmatic (http://www.maposmatic.org)
Ecco i passaggi che ho seguito:
1. creazione di una view in postgres che aggrega tutti i tratti di via con lo stesso nome:
#= CREATE VIEW view_grafo_union AS SELECT nome, ele_desc, ele_tipo, gid, ST_Multi(ST_Union(f.the_geom)) AS the_geom FROM grafo_new AS f GROUP BY nome ORDER BY nome;
2.creazione di una seconda view di intersezione spaziale tra il grafo e la griglia di quadranti:
#= CREATE VIEW view_grafo_union_quadrante AS SELECT ST_Intersection(r.the-geom, m.the_geom) AS intersection_geom, m.codice, r.nome FROM view_grafo_union AS r, quadrante_stradario AS m WHERE ST_Intersects(r.the_geom, m.the_geom);
3. Creazione di una query “array_to_string” che fornisca l’elenco di tutti i quadranti di instersezione per ogni tratto di strada:
#= SELECT DISTINCT a.nome, array_to_string(array(SELECT codice FROM view_grafo_union_quadrante AS b WHERE b.nome = a.nome),’,’) FROM view_grafo_union_quadrante AS a ORDER BY nome;
Per salvare il risultato dell’ultima query su un file basta impartire prima della query il seguente comando:
#= \o /percorso/al/file/di/output.csv
Il CSV potrà poi essere aperto e gestito con Calc o altro editor di testo.
To be continued con snapshot e altri dettagli….
I think that what you wrote made a ton of sense.
However, what about this? suppose you added a little content?
I am not saying your information isn’t good, however what if you added a title to maybe grab folk’s attention?
I mean array_to_string in Postgresql ovvero il problema della “battaglia navale” « map freely is a little vanilla.
You should peek at Yahoo’s front page and see how they write post headlines to get people to click. You might add a related video or a pic or two to get readers excited about everything’ve got to
say. In my opinion, it could bring your posts a little livelier.