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.
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