social.gl-como.it

TIL: overpass-turbo

Metti che una mattina ti viene il bisogno di avere l'elenco dei capoluoghi di provincia e relative posizioni.

E ti viene in mente che queste informazioni su openstreetmap già ci sono. Come fare a estrarle?

Apro il sito overpass-turbo (overpass-turbo.eu/), e vedo che c'è già un esempio che cerca le fontanelle. Ok, sembra semplice, ma se devo fare qualcosa di più complicato?

Guardo in alto e vedo nel menu "Wizard". Permette di generare query complicate partendo da descrizioni semplici in inglese. Con tanto di esempi di ricerche più complicate. Un veloce giro sulla wiki di openstreetmap per vedere i campi giusti per la query, guardo gli attributi di qualche città a caso per vedere qualche esempio e arrivo a questa:

(place=city or place=town) and (capital=2 or capital=4 or capital=6) in italy

e la query generata è:

[out:json][timeout:25];
// fetch area “italy” to search in
{{geocodeArea:italy}}->.searchArea;
// gather results
(
nwr["place"="city"]["capital"="2"](area.searchArea);
nwr["place"="city"]["capital"="4"](area.searchArea);
nwr["place"="city"]["capital"="6"](area.searchArea);
nwr["place"="town"]["capital"="2"](area.searchArea);
nwr["place"="town"]["capital"="4"](area.searchArea);
nwr["place"="town"]["capital"="6"](area.searchArea);
);
// print results
out geom;

Che fondamentalmente vuol dire, città con più di 10.000 abitanti e che siano capoluoghi di provincia(6) / regione(4) /stato(2).

A questo punto il tutto può essere salvato in un file json.


Prossimo passo: usare jq per estrarre solo le informazioni che mi servono.

2 3
Quando ti pagano a byte di codice è imprescindibile inserire nel sorgente l'elenco completo di TUTTI i comuni italiani, con provincia, regione, CAP, prefisso telefonico e coordinate: potrebbe sempre servire.

Nel caso qualcuno fosse curioso. Questo è come estrarre nome e coordinate dall'output, usando jq:

cat province.geojson | jq ".features[] | { name: .properties.name , coord: .geometry.coordinates} " >province.json

Questo sito utilizza cookie per riconosce gli utenti loggati e quelli che tornano a visitare. Proseguendo la navigazione su questo sito, accetti l'utilizzo di questi cookie.