[Talk-it] Statistiche

David Paleino d.paleino at gmail.com
Mon Jun 1 13:46:35 BST 2009


On Mon, 1 Jun 2009 13:04:26 +0200, Diego Guidotti - Aedit s.r.l. wrote:

> Ciao,
> 
> per generare le statistiche carico tutte le mappe italiane sul db postgres e
> poi con una query spaziale spezzo tutti gli elemementi lineari usando il
> tematismo dei limiti amministrativi comunali ISTAT.

Ok, come se avessi capito, *g*

> Dopo averle spezzate calcolo, per unità amministrativa, la lunghezza dei
> sentimenti.

Ok.

> Ecco i comandi (sistema operativo linux, con Postgres/Postgis e osm2pgsql
> per caricare i dati):

Ok, questo l'avevo fatto...

> 1) Script che scarica il db OSM italiano e lo carica su postgis creando una
> tabella che si chiama italy_20090530_line (la data ovviamente cambia)
> dt=`date +"%Y%m%d"`
> wget http://download.geofabrik.de/osm/europe/italy.osm.bz2
> # oppure wget http://downloads.cloudmade.com/europe/italy/italy.osm.bz2
> bunzip2 italy.osm.bz2
> osm2pgsql -l -p italy_$dt italy.osm

Ma in unica tabella, senza "dipendere" dalla data. Per le "percentuali di
crescita" però la data serve, quindi comincerò da capo :)

> 2) SQL da eseguire per spezzare le linee -> genera la tabella
> osm_stat_20090530 con le geometrie spezzate
> 
>  create table osm_stat_20090530 as select c.cod_reg, c.pro_com, l.highway,
>  l.ref, l.name , intersection (l.way, transform(c.geom,4326)) FROM
>  italy_20090530_line l, it_comuni c
>  WHERE l.highway <>'' AND l.way && transform(c.geom,4326)
>  AND intersects(l.way , transform(c.geom,4326))

Eccolo.. questo è il trucco :)

> 3) query
> 
> --per le statistiche regionali
> 
>  SELECT c.nome_reg, sum(c.pop2001),
>  sum(length(transform(s.intersection,3395))) AS highw
>  FROM it_comuni c LEFT JOIN osm_stat_20090530 s ON c.pro_com = s.pro_com
>  GROUP BY c.nome_reg order by nome_reg
> 
> -- numero di comuni mappati per regione
>  select p.nome_regione, count(p.cod_pro), count(p.highw) FROM
>  ( SELECT r.nome_regione, c.cod_pro, c.pro_com, c.geom, c.nome_com,
>  c.pop2001, min(s.cod_reg) AS highw
>  FROM it_comuni c LEFT JOIN osm_stat_20090503 s ON c.pro_com = s.pro_com,
>  it_prov_name p, it_reg_name r
>  where p.cod_pro =c.cod_pro AND p.cod_reg=r.cod_reg
>  GROUP BY r.nome_regione, c.cod_pro, c.pro_com, c.geom, c.nome_com,
>  c.pop2001
>  ) p GROUP BY p.nome_regione;

Ok, grazie mille!

> 4) esporto i dati in excel e li sistemo

Vedrò se si può automatizzare il tutto, magari con un cron su un qualche
server :)

Grazie ancora,
David

-- 
 . ''`.  Debian maintainer | http://wiki.debian.org/DavidPaleino
 : :'  : Linuxer #334216 --|-- http://www.hanskalabs.net/
 `. `'`  GPG: 1392B174 ----|---- http://snipr.com/qa_page
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.openstreetmap.org/pipermail/talk-it/attachments/20090601/902d3855/attachment.pgp>


More information about the Talk-it mailing list