Uso di MapCSS per estendere il validatore di JOSM. Presentazione di Francesco Ansanelli fatta durante l'incontro del gruppo OSMers BI-VC-CVL il 27 febbraio 2021.
3. Overpass per la QA
PRO
1. Flessibile
2. Riproducibile
3. Aree grandi
CONS
1. Collezione di query “personali”
2. Esecuzione una tantum
3. Errori già su OSM
4. Non “portabile”
SOLUZIONI
Istituire un archivio di query condivise per la QA
su Wiki
4. Validatore di JOSM per la QA
PRO
1. Riproducibile
2. Eseguito sempre prima della commit
(=prevenzione dell’errore)
3. Versatile (MapCSS usato anche in altri
progetti, come Osmose)
CONS
1. “hard-coded”
2. Aree piccole
3. Non scalabile su PC (risorse limitate)
SOLUZIONI
Usare delle regole esterne per estendere le
funzionalità di JOSM
https://josm.openstreetmap.de/wiki/Rules
https://github.com/fansanelli/map-this-way
6. CSS - Cascading Style Sheets
In italiano fogli di stile a cascata, linguaggio di markup utile per definire le regole di utilizzo dei font, colori e layout.
Cos’è a cascata[1]? “Il processo di combinare diversi fogli di stile e risolvere conflitti tra essi” (Håkon Wium Lie).
Composizione: regole, proprietà, commenti
Esempio di regola:
8. SFIDA
Ho appena installato JOSM per mappare la mia cascina (immaginaria):
SEGUE DEMO
al termine della quale, voglio sapere da voi quanti errori ho fatto!
10. /* mtw randomhighwayservice */
way[highway!=service][service] {
throwWarning: tr("{0} not {1}", "{0.key}", "{1.key}");
group: "MapThisWay";
}
1. In verde il commento
2. In giallo il selettore
3. In rosso il tipo (es. way, node, relation, area, line, canvas, *)
4. in blu i tag ed in marrone i valori
5. in rosa il blocco delle dichiarazioni
6. le proprietà throwWarning e group sono specifiche di JOSM
7. notare il valore tr(...) per gestire traduzioni con String.format
11. /* mtw addressonbuilding */
way[building][tag_regex("^addr:*")][inside("IT")] {
throwWarning: tr("building with addr:*");
group: "MapThisWay";
}
1. l’espressione tag_regex è un “eval” (espressione “valutata”) e esegue la regular expression sull’elenco delle chiavi (non sui valori)
2. “inside” è un selettore speciale (selettore di territorio) e serve per limitare un controllo per codice nazione
12. /* mtw onelanenooneway - Suggested by Volker */
way[highway][lanes<2][!oneway][!junction] {
throwWarning: tr("{0} {1}<{2} without {3}", "{0.key}", "{1.key}", "{1.value}",
"{2.key}");
group: "MapThisWay";
}
/* mtw onelanenopassingplaces - Suggested by Andrea Musuruane */
way[highway][lanes<2][oneway=no][passing_places!=yes] {
throwWarning: tr("{0} {1}<{2} with {3} without {4}", "{0.key}", "{1.key}",
"{1.value}", "{2.tag}", "{3.tag}");
group: "MapThisWay";
fixAdd: "passing_places=yes";
}
1. fixAdd è una proprietà particolare che attiva il tasto “Correggi” su JOSM e aggiunge (o sostituisce) un tag con un altro.
14. /* mtw farmyardwithoutfarm - Suggested by Andrea Musuruane */
*[place=farm] ⊈ area:closed2[landuse=farmyard] {
throwWarning: tr("{0} without place=farm", "{1.tag}");
group: "MapThisWay";
}
1. “:closed2” è una pseudo-classe che controlla che il primo nodo e l’ultimo coincidano anche se non sono stati scaricati tutti gli elementi del
poligono
2. ⊈ è un operatore per verificare che un elemento sia uguale o parte di un altro