Stradario dei comuni d'italia

esiste un file csv contenente lo stradario completo delle vie italiane, con le relative coordinate?

Non mi sembra esista una cosa del genere già pronta
Diciamo che in linea teorica sono dati che possono essere recuperati utilizzando una query Overpass.

Qualche considerazione in merito:

  • cosa intendi con “relative coordinate” ? una way è composta da un insieme di punti, ognuno con le proprie coordinate. Si può estrarre un centro geometrico e usare quello, ma è una semplificazione che potrebbe dare risultati fuorvianti se il tratto considerato è lungo e con curve. Magari ti è sufficiente. Ad esempio:

  • una via in OSM è spesso composta da più parti distinte. Prendiamo ad esempio Viale Certosa a Milano: solo guardando le corsie centrali sono 26 elementi che salgono a 98 se consideri anche le vie parallele con lo stesso nome. Avresti conseguentemente 26 o 98 centroidi. E’ possibile comunque accorparli in output, a discapito però della possibilità di avere le coordinate

  • i dati da trattare comportano una elaborazione articolata e soprattutto lunga se, come penso, hai necessità di avere una colonna contenente il nome del comune. Ho fatto qualche esperimento con la città Metropolitana di Milano e stimo che ci vogliano almeno 30 min solo per estrarre lo stradario dei 133 comuni che la compongono. Volendo si può ridurre il tempo (< 10 minuti in funzione del carico del server) se ti accontenti di avere una riga che mostra il nome comune seguita da tutte le strade. Aggiungo che l’estrazione dati da Overpass con output CSV non dà purtroppo errori in caso di timeout e mostra comunque i dati estratti fino a quel momento.

La query la trovi qui.

Applicarla a livello Italia mi sembra una strada difficilmente percorribile. Farne una per provincia (che puoi cambiare nella linea 3) sembra già più fattibile.

Ciao

per estrazioni così voluminosi sarebbe meglio scaricarsi un estratto dei dati italiani e farlo su una macchina locale, piuttosto che utilizzare risorse comuni e donati a tutti.

OK. grazie per le info.
ma da dove e come scarico un file csv?

ho provato con Milano,da qui: overpass turbo
ma la query dura tantissiimo, e non finisce più…

Vero, ma per fortuna le risorse comuni delle API Overpass sono tutelate da timeout, RAM impegnabile e quota.

Concordo comunque che potrebbe essere più efficiente, ma avendo però risorse macchina, competenze tecniche e un workflow che descriva come fare.

Il problema fondamentale penso sia fare query di tipo contains\within per identificare le strade contenute entro un confine e forse qui potrebbe venire in aiuto spatialite… se conosci un tutorial che spieghi come ottenere il CSV richiesto forse potrebbe essere d’aiuto.

Vai su Esporta e seleziona “dati grezzi direttamente da Overpass API”

Come dicevo non è una query banale, quindi ci vuole tempo

funziona!
Grazie.

ho tre dubbi

1- con questa query mi da solo via e coordinate, ma mi opccorrerebbe anche il comune il cap e la sigla della provincia.
[out:csv(comune, name, highway, ::lat,::lon;true;";")][timeout:600];
//provincia da cui estrarre i dati
area[boundary=administrative][“admin_level”=6][name=“Milano”]->.searchArea;
relation[boundary=administrative]“admin_level”=8;
foreach (
map_to_area->.comune;
make stat comune=comune.set(t[“name”]);
out;
way[highway~“residential|unclassified|tertiary|secondary|primary”]name;
out center;
);

2-ho provato ad inserire Sud Sardegna al posto di Milano ma non mi da niente.

3- La citta va in serita sempre in minuscolo?

  • Il nome del comune viene già riportato, ma in una riga del file csv a parte rispetto alle strade (vedi riga 2 in questo esempio)
    image
    tecnicamente si può riportare in ogni riga cambiando leggermente la query, ma questo porta ad un notevole aumento dei tempi di esecuzione

  • CAP: per farla breve il CAP in OSM è in genere riportato sui nodi che rappresentano i civici, quindi non è un dato che con quella query è relazionabile alle strade

  • Sigla provincia: se la query estrae un CSV per provincia forse la puoi aggiungere manualmente te la sigla… comunque è un dato presente anche se non per tutte le province. Con questa query lo estrai

Qualcuno è stato veloce e ha già fatto sparire da OSM Sud Sardegna sostituendola con le nuove Medio Campidano, Sulcis Iglesiente e estendendo quella di Cagliari

nella query originale sì, mentre in quella che trovi in risposta al punto 1 puoi mettere il nome come vuoi

Scusa il ritardo ma ho avuto un pò di problemi.

Funziona tutto. e ti ringrazio.

Non so se è possibile modificare la query per avere per le regioni anche il loro codice istat ( per esempio Piemonte è 1) per le province (per esempio 42 per Ancona) per i comuni il loro codice ISTAT ( per esempio per MESSINA è 083048)

E ho anche nessun risultato per Aosta e Barletta Andria Trani, e Sud Sardegna.

Grazie.

Scusa il ritardo ma ho avuto un pò di problemi.

Funziona tutto. e ti ringrazio.

Non so se è possibile modificare la query per avere per le regioni anche il loro codice istat ( per esempio Piemonte è 1) per le province (per esempio 42 per Ancona) per i comuni il loro codice ISTAT ( per esempio per MESSINA è 083048)

E ho anche nessun risultato per Aosta e Barletta Andria Trani, e Sud Sardegna.

Grazie.

con una query a parte (province senza campo ref:ISTAT non appariranno)

[out:csv(name, "ref:ISTAT";true;";")][timeout:600];
{{geocodeArea:Italia}}->.searchArea;
//admin_level=6 per province
//admin_level=4 per regioni
relation["admin_level"="6"]["boundary"="administrative"]["ref:ISTAT"](area.searchArea);
out;

modificando leggermente la query

[out:csv(comune, ISTAT, name, highway, ::lat,::lon;true;";")][timeout:600];
//provincia da cui estrarre i dati
area[boundary=administrative]["admin_level"=6][name="Milano"]->.searchArea;
relation[boundary=administrative]["admin_level"=8](area.searchArea);
foreach (
  map_to_area->.comune;
  make stat comune=comune.set(t["name"]),ISTAT=comune.set(t["ref:ISTAT"]);
  out;
  way[highway~"residential|unclassified|tertiary|secondary|primary"][name](area.comune);
  out center;
);

la relazione della provincia di Aosta non c’è. Sostituisci nella precedente query la corrispondente riga di selezione della provincia con

area[boundary=administrative]["admin_level"=4][name="Valle d'Aosta / Vallée d'Aoste"]->.searchArea;

Barletta Andria Trani in OSM è Barletta-Andria-Trani
Per Sud Sardegna vedi mia risposta precedente

se proprio bravo! Complimenti.
Tutto risolto.

Unico problema , quando chiamo Valle d’Aosta / Vallée d’Aoste, con l’ultima modifica non mi da i codici ISTAT dei vari comuni, ma l’estrazione ha tutti i dati.
Grazie sempre per la pazienza e le indicazioni.

ps.
ma se volessi editare la query esiste un editor tipo Access?

I codici ISTAT sono riportati se guardi bene.

Semmai il problema è che in lista ti trovi due comuni francesi (Saint-Gervais-les-Bains e Chamonix-Mont-Blanc) per problemi di sovrapposizione dei confini.

[out:csv(comune, ISTAT, name, highway, ::lat,::lon;false;“;”)][timeout:600];
//provincia da cui estrarre i dati
area[boundary=administrative][“admin_level”=6][name=“Napoli”]->.searchArea;
relation[boundary=administrative]“admin_level”=8;
foreach (
map_to_area->.comune;
make stat comune=comune.set(t[“name”]),ISTAT=comune.set(t[“ref:ISTAT”]);
out;
way[highway~“residential|unclassified|tertiary|secondary|primary”]name;
out center;
);

invece di utilizzare [name=“Napoli”], è possibile utilizzare l’ID?

tipo:
[ID=“40600”]
.
Grazie