# acmap

> Tool demo in browser per acustica ambientale: rilievi fonometrici CSV e modello di propagazione semplificato per banda di ottava, con termini ISO 9613 e diffrazione Maekawa su edifici OSM.

Pubblicato: 2026-05-20
Aggiornato: 2026-08-25
Ambito: acustica
Riferimento normativo: Termini di propagazione del rumore in ambiente esterno <https://en.wikipedia.org/wiki/Environmental_noise>
Repository: <https://github.com/stefanofante/acmap>

Pagina: <https://www.stline.it/wiki/acmap/>

---

**In breve.** acmap è uno strumento dimostrativo che gira interamente nel browser: visualizza rilievi fonometrici da CSV e simula la propagazione di sorgenti puntuali per banda di ottava con un modello semplificato — divergenza geometrica, assorbimento atmosferico ISO 9613-1, effetto suolo a G-factor e diffrazione Maekawa su edifici reali scaricati da OpenStreetMap. Non implementa il metodo completo della ISO 9613-2: mancano riflessioni, diffrazione laterale e multipla, topografia, direttività e meteorologia, e non sostituisce un modello adeguato né il giudizio di chi firma una valutazione.

acmap è uno strumento dimostrativo per acustica ambientale che gira interamente in browser senza backend. Visualizza rilievi fonometrici caricati come CSV e simula la propagazione di sorgenti puntuali per banda di ottava con un **modello semplificato**: divergenza geometrica, assorbimento atmosferico secondo la ISO 9613-1, un termine di effetto suolo a G-factor e diffrazione Maekawa su edifici reali scaricati live da OpenStreetMap via Overpass API.

Una precisazione dovuta, perché il nome della norma è facile da fraintendere: **acmap non implementa il metodo completo della ISO 9613-2**. Ne usa alcuni termini — la divergenza, l'assorbimento atmosferico della Parte 1 — mentre lo schermaggio è affidato a Maekawa e non al §7.4 della norma, l'effetto suolo è un modello semplificato broadband, e mancano del tutto riflessioni, diffrazione laterale, diffrazione multipla, topografia, direttività e il trattamento meteorologico previsto dal metodo. La denominazione corretta è quindi *modello di propagazione semplificato con termini della famiglia ISO 9613*, non «ISO 9613-2 implementata». Questa pagina sintetizza il README e documenta metodo, assunzioni e lettura dei risultati; il riferimento autoritativo del codice resta GitHub.

## Origine e valore aggiunto

Il tool nasce dal lavoro di ST-LINE sull'acustica ambientale, parallelamente allo sviluppo del prodotto commerciale SoundPro. acmap è esplicitamente un demo: strumento educativo open source che incarna l'approccio tecnico ST-LINE al calcolo acustico, senza pretendere di sostituire un modello adeguato alla metodologia né il giudizio professionale di chi firma una valutazione.

Il valore aggiunto rispetto ad altri demo acustici online è la **trasparenza dei dati**: gli edifici scaricati da OSM hanno quasi sempre altezze stimate invece che misurate, e acmap lo dichiara visivamente (bordi tratteggiati, statistiche % stimati, warning sopra soglia 70%). Il limite del dato è dichiarato in pagina, non lasciato dedurre da numeri presentati come certi. Quanto sia quasi sempre lo dice un conto sul dato reale: su una risposta Overpass del centro di Treviso, **zero** edifici su 1365 portavano un tag di altezza esplicito e solo 8 avevano `building:levels`.

## Cosa fa

**Modalità Misura**: carica CSV con colonne `lat, lon, leq`, visualizza i punti **etichettati 1..N** colorati per livello, heatmap kernel density, isolinee interpolate (IDW — interpolazione **cartografica**, non un modello di propagazione: fra due punti misurati non c'è alcuna legge fisica che dica che il campo segua l'inverso del quadrato della distanza in pianta), statistiche aggregate. Selezionando una classe DPCM 14/11/1997 (I–VI) i punti si colorano **verde** (sotto la soglia selezionata) / **rosso** (sopra) — è un pre-screening numerico, non una verifica di conformità; vedi *Come leggere i risultati*. Export GeoJSON e CSV con colonna `label`.

**Modalità Previsione**: posiziona una sorgente puntuale sulla mappa con un click, scarica automaticamente gli edifici OSM nell'area da Overpass, calcola la propagazione su griglia ricevitori configurabile applicando per banda di ottava (8 bande, 63 Hz – 8 kHz) divergenza geometrica, assorbimento atmosferico (T, RH editabili), effetto suolo con G-factor, diffrazione Maekawa sul primo edificio intercettato.

**Spettri sorgente** (9 preset): piatto, traffico, ferroviario, industriale, basse frequenze (HVAC), più 4 sorgenti specifiche a bassa frequenza — turbina eolica, trasformatore elettrico, ronzio impianto industriale, chiller HVAC.

**Ponderazione A / Z / C**: l'output può essere espresso in dB(A) (default normativo), dB con ponderazione piatta ("Z") o dB(C), che attenua molto meno le basse frequenze. Due cautele terminologiche: il dB(Z) di acmap non è «il livello fisico» in assoluto, è la somma non pesata **sulle otto bande da 63 Hz a 8 kHz** e ignora tutto ciò che sta fuori; e il dB(C) non è un indicatore di impulsività — in acustica ambientale italiana il carattere impulsivo si determina con la procedura del DM 16/03/1998, non da un L_Ceq. Il selettore in pannello cambia la ponderazione applicata; **l'estensione della mappa e le ombre degli edifici NON cambiano** con la ponderazione — cambiano solo i colori dei punti, perché la ritenzione dei ricevitori usa il livello fisico lineare.

I grafici a bande di ottava (canvas "Spettro tipico", tooltip spettrale dei ricevitori) mostrano uno spettro in otto bande d'ottava, non una trasformata: non possono risolvere componenti tonali. Sono sono a **doppia serie**: barra dello spettro **lineare** (carattere fisico della sorgente, non pesato) accanto a quella **pesata** (contributo al Leq nella ponderazione scelta). Il confronto rende esplicito quanto la ponderazione A schiacci le basse frequenze: una turbina eolica appare dominata dai bassi nel lineare e mid-peaked in dB(A).

## Metodo di calcolo

Il motore è condiviso con il tool [calcolo-barriere](/tools/calcolo-barriere/) (modulo `@lib/physics/`). In modalità Previsione, per ogni banda di ottava `f ∈ {63, 125, 250, 500, 1000, 2000, 4000, 8000} Hz` si calcola il livello al ricevitore:

$$
L_p(f) = L_w(f) - A_{\text{div}} - A_{\text{atm}}(f) - A_{\text{gr}} - A_{\text{dif}}(f)
$$

- **`Lw(f) = Lw + ΔL_spettro(f)`** — potenza sonora di banda. `Lw` va inteso **non ponderato**: la ponderazione A o C viene applicata dopo, banda per banda, quindi inserire un L_WA come se fosse un L_W significa pesarlo due volte. `ΔL_spettro` è la forma relativa del preset, e va detto che quelle forme sono **stilizzate**, non derivate da misure: scegliere «traffico» dà la firma spettrale tipica di una strada, non un modello di emissione stradale. Gli offset sono però **normalizzati**, cioè la loro somma energetica fa esattamente 0 dB: cambiare preset a parità di `Lw` cambia la forma dello spettro e non la potenza totale. Fino al 25 agosto 2026 non lo erano, e il totale si discostava dal `Lw` impostato fino a +1,36 dB.
- **`A_div = 20·log₁₀(d) + 11`** — divergenza geometrica (irradiazione sferica del singolo puntuale, ISO 9613-2).
- **`A_atm(f) = α(f, T, RH)·d`** — assorbimento atmosferico, coefficiente `α` ISO 9613-1: cresce con la frequenza (gli acuti si attenuano in fretta).
- **`A_gr`** — effetto suolo a G-factor (`G = 0` riflettente … `G = 1` assorbente), **frequenza-indipendente** in questo motore: un termine broadband interpolato fra −3 dB (terreno duro) e una forma di tipo «soft ground», con altezza media presa come (h_s + h_r)/2. Non è l'A_gr per banda del metodo generale della ISO 9613-2, e non è nemmeno l'applicazione del suo metodo semplificato, che è definito per livelli **ponderati A**, richiede terreno prevalentemente poroso, esclude i toni puri e non ammette valori negativi. Ne segue una conseguenza sugli output: gli spettri e i totali in dB(Z) e dB(C) restano utili per leggere il carattere della sorgente, ma non sono coerenti con un termine di terreno derivato da un metodo A-weighted.
- **`A_dif(f)`** — diffrazione **Maekawa** sul **primo** edificio che la linea di vista incontra: `D = 10·log₁₀(3 + 20·N)`, numero di Fresnel `N = 2δ/λ`, `λ = c/f`, `δ` differenza di cammino dell'onda che passa sopra l'edificio, con il risultato **troncato fra 0 e 25 dB**. Due precisazioni: il codice seleziona il primo ostacolo intercettato (`firstBuildingHit`), non quello acusticamente dominante — un secondo edificio più alto o più vicino al ricettore potrebbe dare un `δ` maggiore; e Maekawa **non è** il metodo di screening del §7.4 della ISO 9613-2, che ha costanti e cap diversi (vedi la [wiki sulla diffrazione](/wiki/maekawa/)). Il cap a 25 dB è un limite dell'algoritmo, non un risultato fisico.

Il livello totale è la **somma energetica** sulle bande con la ponderazione `w(f)` scelta (A / C / 0 per Z):

$$
L_{eq} = 10\,\log_{10}\!\left( \sum_f 10^{(L_p(f) + w(f))/10} \right)
$$

acmap usa il metodo **Maekawa** per la diffrazione (la firma del modulo prevede anche il §7.4 della ISO 9613-2, usato dal [tool barriere](/wiki/noise-barrier-calc/), che ha anche la diffrazione laterale). La griglia copre il bbox dell'estensione impostata con **espansione radiale**: i ricevitori oltre il raggio dalla sorgente vengono scartati.

## Il bilancio dei termini, in numeri

La formula dice quali termini ci sono; non dice quanto pesano. Un caso concreto, prodotto dal motore dello strumento: sorgente stradale con L_w = 100 dB, ricettore a 200 m, sorgente a 1 m e ricettore a 4 m di altezza, terreno misto (G = 0,5), 20 °C e 70 % di umidità relativa.

I due termini indipendenti dalla frequenza valgono **A_div = 57,0 dB** e **A_gr = 0,67 dB**. A 1 kHz l'attenuazione complessiva è 58,7 dB, di cui 57,0 vengono dalla sola divergenza; a 8 kHz è 73,2 dB, perché l'aria ne aggiunge 15,5. Attenzione a non trasformare questi rapporti in percentuali di energia: sono decibel, e togliere 57 dB significa dividere l'intensità per mezzo milione, dopodiché gli altri termini agiscono su quel che resta. Tutto il resto è spettro:

| Banda | L_w(f) | A_atm | L_p lineare | ponderazione A | L_p in dB(A) |
|---|---|---|---|---|---|
| 63 Hz | 85,2 dB | 0,02 dB | 27,5 dB | −26,2 | 1,3 dB(A) |
| 125 Hz | 89,2 dB | 0,07 dB | 31,4 dB | −16,1 | 15,3 dB(A) |
| 250 Hz | 92,2 dB | 0,22 dB | 34,3 dB | −8,6 | 25,7 dB(A) |
| 500 Hz | 93,2 dB | 0,56 dB | 34,9 dB | −3,2 | 31,7 dB(A) |
| 1000 Hz | 94,2 dB | 1,00 dB | 35,5 dB | 0,0 | 35,5 dB(A) |
| 2000 Hz | 92,2 dB | 1,81 dB | 32,7 dB | +1,2 | 33,9 dB(A) |
| 4000 Hz | 88,2 dB | 4,62 dB | 25,9 dB | +1,0 | 26,9 dB(A) |
| 8000 Hz | 83,2 dB | 15,53 dB | 10,0 dB | −1,1 | 8,9 dB(A) |

Somma energetica: **39,2 dB(A)**, 41,3 dB(Z), 41,2 dB(C).

Due cose si leggono a colpo d'occhio. La prima è che a 200 m l'assorbimento atmosferico è ancora trascurabile sotto i 500 Hz (frazioni di decibel) e già pesante a 8 kHz (15,5 dB). La seconda è che la banda a 63 Hz, che parte da 85,2 dB di potenza, arriva a contribuire **1,3 dB(A)**: la ponderazione A da sola le toglie 26 dB. In dB(Z) quella stessa banda ne vale 27,5.

### Z, A e C sullo stesso punto

Da qui si capisce perché lo strumento offra tre ponderazioni invece di una. A 500 m dalla sorgente, con lo stesso L_w e tre spettri diversi:

| Sorgente | dB(Z) | dB(A) | dB(C) | C − A |
|---|---|---|---|---|
| Traffico stradale | 32,1 | 29,3 | 32,0 | 2,7 dB |
| Turbina eolica | 33,8 | 23,1 | 33,4 | 10,3 dB |
| Trasformatore | 33,8 | 23,3 | 33,4 | 10,1 dB |

La colonna **C − A** è un indicatore **spettrale**, non normativo: cresce quando l'energia si sposta in basso, perché la ponderazione C attenua le basse molto meno della A. Va usato per capire dove sta il contenuto della sorgente, non come soglia: né il DPCM 14/11/1997, né il DM 16/03/1998, né la ISO 9613-2 fissano un valore di C − A oltre il quale dichiarare un problema di basse frequenze. E un C − A alto non implica di per sé un disturbo, che dipende anche dal livello assoluto, dalla tonalità, dalla durata, dal rumore residuo e dall'ambiente interno del ricettore. Turbina e trasformatore hanno in dB(Z) un livello **più alto** del traffico e in dB(A) uno più basso di sei decibel: lo stesso punto, con la stessa fisica, cambia graduatoria a seconda della metrica. È il motivo per cui su una sorgente a bassa frequenza il solo dB(A) può far chiudere l'analisi troppo presto. Con una riserva sul dominio: acmap si ferma a 63 Hz, quindi 31,5 Hz e le bande infrasoniche — spesso decisive proprio per turbine e trasformatori — restano fuori dal modello.

### L'effetto suolo ha segno

Un dettaglio che sorprende leggendo i risultati: A_gr può essere **negativo**, cioè comportarsi da guadagno. Sulla stessa geometria, al variare del G:

| G | 50 m | 100 m | 200 m | 500 m | 1000 m |
|---|---|---|---|---|---|
| 0 (riflettente) | −3,00 | −3,00 | −3,00 | −3,00 | −3,00 dB |
| 0,5 (misto) | −0,25 | +0,40 | +0,67 | +0,81 | +0,86 dB |
| 1 (assorbente) | +2,50 | +3,80 | +4,34 | +4,62 | +4,71 dB |

Nel modello, su terreno perfettamente riflettente il livello risulta **3 dB più alto** del campo libero a ogni distanza: è la scelta di trattare la riflessione come un semplice raddoppio di energia. Va letta come una proprietà del modello, non come una legge del terreno duro: nella realtà diretto e riflesso interferiscono, e il risultato dipende da fase, quote di sorgente e ricettore, frequenza e impedenza reale della superficie — il metodo generale della ISO 9613-2 tratta infatti A_gr in modo molto più articolato. Che una superficie d'acqua o un piazzale asfaltato peggiorino la propagazione resta vero come tendenza; i 3 dB esatti sono del modello. E si vede che l'effetto del suolo assorbente cresce con la distanza e satura: fra 500 e 1000 m guadagna nove centesimi di decibel.

Va ricordato però che in questo motore A_gr è **indipendente dalla frequenza**, mentre l'A_gr della ISO 9613-2 è per banda e ha una forma marcata, con il massimo di attenuazione nelle bande medio-basse. È la semplificazione dichiarata fra le assunzioni: l'ordine di grandezza è giusto, la distribuzione spettrale no.

## L'aria come filtro passa-basso

Il termine A_atm merita una sezione a sé, perché è quello che decide il **carattere** del suono a distanza, non solo il suo livello. Il coefficiente α della ISO 9613-1 vale, a 20 °C e 70 % di umidità:

| Banda | 63 | 125 | 250 | 500 | 1000 | 2000 | 4000 | 8000 Hz |
|---|---|---|---|---|---|---|---|---|
| α [dB/km] | 0,09 | 0,33 | 1,12 | 2,79 | 4,98 | 9,04 | 23,09 | 77,63 |

Fra i due estremi dello spettro c'è un fattore **860**. Moltiplicato per la distanza:

| Distanza | 63 Hz | 500 Hz | 1000 Hz | 4000 Hz | 8000 Hz |
|---|---|---|---|---|---|
| 100 m | 0,0 | 0,3 | 0,5 | 2,3 | 7,8 dB |
| 500 m | 0,0 | 1,4 | 2,5 | 11,5 | 38,8 dB |
| 1000 m | 0,1 | 2,8 | 5,0 | 23,1 | 77,6 dB |
| 2000 m | 0,2 | 5,6 | 10,0 | 46,2 | 155,3 dB |

A 2 km la banda a 8 kHz ha perso **155 dB** per sola aria, mentre quella a 63 Hz ne ha persi due decimi. Centocinquantacinque decibel restano un'attenuazione, non un annullamento — il livello che resta dipende sempre da L_p = L_w − A — ma sono abbastanza perché nella pratica quella banda finisca sotto qualunque rumore di fondo. Una nota sul dominio: le due righe finali della tabella stanno oltre i 1000 m, distanza entro la quale la ISO 9613-2 dichiara una stima di accuratezza; il termine atmosferico si estrapola senza problemi, l'accuratezza complessiva del modello no. È questa la ragione fisica per cui un'autostrada lontana si sente come un rombo e non come un sibilo, e per cui un temporale distante dà un tuono cupo mentre da vicino è uno schianto: l'aria è un filtro passa-basso il cui taglio scende con la distanza.

**Figura:** Grafico del coefficiente di assorbimento atmosferico per banda, aria umida e aria secca

Coefficiente di assorbimento atmosferico per banda d'ottava, in dB/km e scala logaritmica, alla stessa temperatura e a due umidità diverse. Fra i due estremi dello spettro ci sono quasi tre ordini di grandezza; l'umidità sposta le bande alte di un fattore due, e alle medie agisce in verso opposto. Valori dal motore dello strumento, coefficienti ISO 9613-1.

C'è poi la dipendenza da temperatura e umidità, che è il motivo per cui lo strumento le chiede invece di fissarle. Alla stessa temperatura di 20 °C:

| Condizione | 500 Hz | 2000 Hz | 4000 Hz | 8000 Hz |
|---|---|---|---|---|
| 70 % UR | 2,79 | 9,04 | 23,09 | 77,63 dB/km |
| 30 % UR | 2,51 | 14,12 | 48,89 | 168,35 dB/km |

Passare da aria umida ad aria secca **più che raddoppia** l'assorbimento a 8 kHz — e a 500 Hz lo fa scendere leggermente. La dipendenza non è monotona: il picco di rilassamento molecolare si sposta in frequenza con l'umidità, quindi «aria più umida» non significa «sempre più attenuazione». Sotto i 250 Hz, in ogni caso, la scelta di T e UR non sposta praticamente nulla: a 200 m si parla di centesimi di decibel. La conseguenza pratica è che su una mappa dominata dalle basse frequenze i due parametri si possono lasciare al default senza rimorsi, mentre su una sorgente ad alta frequenza e a distanza di chilometri diventano una scelta di scenario, non un dettaglio.

## Assunzioni del modello

- **8 bande di ottava, 63 Hz – 8 kHz.** Non terzi d'ottava.
- **Una sola sorgente puntuale** per calcolo, irradiazione **sferica**, niente direttività.
- **Atmosfera omogenea**, T e RH costanti: niente gradienti di temperatura/vento, niente turbolenza, niente rifrazione. Va sottolineato che il metodo della ISO 9613-2 non descrive un'atmosfera generica ma **condizioni favorevoli alla propagazione** (sottovento o inversione equivalente), con una correzione separata per i livelli medi di lungo periodo: acmap non chiede direzione del vento, climatologia né scenario, quindi il suo risultato è uno scenario semplificato, non un livello ISO sotto condizioni definite.
- **Terreno topograficamente piatto.** Nessun DTM o DEM: quote di sorgente, ricettore ed edifici sono riferite a un piano comune. Rilevati, trincee, scarpate e avvallamenti — che cambiano linea di vista, `δ`, effetto suolo e schermatura — sono invisibili al modello.
- **Distanza orizzontale.** Sulla griglia la distanza di propagazione è quella in pianta; sorgente e ricettore entrano con le loro quote nei termini che le richiedono, ma la distanza non è la distanza obliqua. Trascurabile a grande distanza, non a distanza breve o con sorgenti molto elevate.
- **Diffrazione semplificata**: Maekawa a schermo singolo sul **primo** edificio intercettato dalla linea di vista, con cap a 25 dB. Niente multi-diffrazione in cascata, niente diffrazione laterale. Le due mancanze tirano in versi opposti: ignorare il cammino laterale attorno a un edificio alto e stretto **sovrastima** lo schermaggio, ignorare gli edifici successivi lo **sottostima**. Non c'è quindi una direzione conservativa garantita dell'errore.
- **Niente riflessioni** su facciate o terreno.
- **Effetto suolo frequenza-indipendente** — semplificazione rispetto all'Agr per banda dello standard.
- **Altezze edifici da OSM**, spesso stimate (vedi *Avvertenze*).
- I ricevitori con livello fisico trascurabile (sotto soglia) vengono scartati dalla griglia — **indipendentemente dalla ponderazione** scelta.

## Come leggere i risultati

- **dB(A) vs dB lineare (Z) vs dB(C).** Il dB(A) è la metrica normativa, ma comprime molto le basse frequenze (−26 dB a 63 Hz). Per leggere il vero carattere spettrale di una sorgente a bassa frequenza (turbina, trasformatore) usa **dB(Z)** o guarda la serie lineare nei grafici a doppia serie: in dB(A) anche una sorgente low-freq appare con il picco sui medi.
- **L'estensione della mappa non dipende dalla ponderazione.** Cambiando A/Z/C cambiano solo i colori; geometria, ombre e celle restano identiche. È voluto: la ponderazione è una scelta di lettura, non di fisica.
- **Tooltip spettrale.** Passando il mouse su un ricevitore si vede lo spettro per banda di ottava in doppia serie (lineare + pesato): mostra quali frequenze dominano davvero al punto.
- **Ombre acustiche.** Con edifici nel calcolo, la statistica «ricevitori in ombra» conta i punti in cui un edificio **intercetta la linea di vista**: è una condizione geometrica, non un'ombra acustica — il suono arriva comunque per diffrazione superiore, laterale e riflessioni. Un'ombra è più marcata sugli acuti che sui bassi (i bassi aggirano l'ostacolo).
- **«Leq medio» = media aritmetica** del campione in modalità Misura. È una statistica **descrittiva dei valori caricati**, non un livello fisico: il L_Aeq è già una grandezza energetica riferita a un tempo, e la media aritmetica di 50 e 70 dB(A) misurati in due luoghi diversi dà 60 dB(A) senza che quel numero descriva un campo. Vale come sintesi del campione; non ha significato normativo.
- **La «% punti sopra soglia»** è una statistica del campione cartografico, non un indicatore di conformità: la norma verifica livelli in punti determinati e in condizioni determinate, non frazioni di una griglia.
- **Celle lontane o in ombra profonda** appaiono sbiadite o assenti: sotto la soglia del modello.

## Come si usa

### Modalità Misura (rilievo caricato)

1. Apri il tool, seleziona **Misura** nel toggle in alto.
2. Carica un CSV con tre colonne minime: `lat`, `lon`, `leq` (header opzionale, separatore virgola, righe commento `#` ignorate). Drag-and-drop o bottone **Carica CSV**. Se il CSV ha una colonna `label`/indice come primo campo, viene usata come etichetta dei punti (round-trip con l'export).
3. I punti compaiono sulla mappa **etichettati 1..N** (numero inciso nel disco); le statistiche del campione (numero punti, **Leq medio** = media aritmetica, min·max, % sopra il limite) compaiono nel pannello **Statistiche**, con sotto-label tecniche.
4. Seleziona una classe DPCM 14/11/1997 (I–VI): i punti si colorano **verde** (sotto la soglia selezionata) o **rosso** (sopra), e un sub-label sotto il menu conferma il confronto attivo. Il confronto è col **valore limite assoluto di immissione diurno** della Tabella C, e va letto per quello che è: un pre-screening numerico, non una verifica di conformità. Un CSV con la sola colonna `leq` non dice tempo di riferimento, tempo di osservazione e di misura, rappresentatività, rumore residuo né eventuali componenti correttive, che sono gli elementi che il DM 16/03/1998 richiede; e la Tabella C si riferisce all'immissione **dell'insieme delle sorgenti**, quindi dentro una fascia di pertinenza stradale o ferroviaria il confronto può essere addirittura quello sbagliato (vedi [DPR 142/04](/wiki/italian-road-noise-limits/)).
5. Opzionale: attiva **heatmap kernel-density** o **isolinee IDW**. Toggle tema e lingua in header.
6. **Export**: GeoJSON o CSV con colonna `label` (l'indice 1..N dei punti). Il CSV esportato è ri-importabile mantenendo le etichette.

### Modalità Previsione (simulazione propagazione)

1. Switch a **Previsione** nel toggle in alto.
2. Click sulla mappa per posizionare una sorgente puntuale; il tool scarica automaticamente gli edifici OSM in un raggio attorno (Overpass API, ~5 s, con popup di stato).
3. Imposta i parametri sorgente: `Lw` (potenza sonora, dB), altezza, **spettro** (9 preset; il pulsante ⓘ apre il popover con descrizione e mini-grafico).
4. Scegli la **ponderazione** A / Z / C.
5. Imposta i parametri atmosferici (T °C, RH %) e l'effetto suolo (G-factor 0–1).
6. Imposta la griglia ricevitori (estensione, passo) e l'altezza ricevitori.
7. Click **Calcola**: chunked async, non blocca la UI, spinner di progresso.
8. Risultato: griglia ricevitori colorata + heatmap/isolinee, statistiche aggregate, e — se *"Edifici partecipano al calcolo"* è attivo — la statistica **"ricevitori in ombra acustica"** nella barra di stato.

### Sezione verticale, cattura ed export grafico

- Click su un ricevitore della griglia → SVG interattiva con geometria sorgente → edificio → ricevitore, path diretto e diffratto, valori path-difference e attenuazione.
- Tooltip spettrale al passaggio del mouse sui ricevitori → mini-spettro a doppia serie per banda di ottava (otto bande, non una FFT).
- Due controlli mappa in alto a destra: **📷 cattura schermata** (Screen Capture API → PNG dei pixel realmente disegnati, identico a ciò che si vede a schermo) e **🖨 stampa/PDF** (layout dedicato A4 orizzontale: mappa + legenda + footer parametri, una pagina), per relazioni preliminari.

## Cosa non fa

Multi-diffrazione (più edifici in cascata), diffrazione laterale (attorno ai bordi), sorgenti multiple/lineari/areali, riflessioni multiple su facciate, meteorologia profilata, CNOSSOS-EU, NMPB-Routes-2008. Tutte le limitazioni sono dichiarate apertamente nel disclaimer del tool e qui sotto.

## Avvertenze

- **Tool dimostrativo, non peritale.** acmap **non è certificato** per uso peritale, validazione di limiti normativi, o presentazione in sede giudiziaria. Per quegli usi servono due cose distinte, che non si sostituiscono a vicenda: un **modello di calcolo adeguato** alla metodologia richiesta — CadnaA, SoundPLAN e NoiseModelling sono esempi diffusi, ma la normativa italiana non istituisce una categoria di «software certificato» né impone un prodotto: il DM 29/11/2000 fissa requisiti funzionali che il modello deve avere — e un **tecnico competente in acustica** iscritto all'ENTECA, che è la figura professionale responsabile dell'attività. Il software è uno strumento, non un'alternativa al professionista.
- **Sorgente singola.** La modalità Previsione gestisce UNA sorgente puntuale per calcolo. Per scenari con barriera acustica + sorgente lineare/areale vedi il tool gemello [calcolo-barriere](/open-lab/noise-barrier-calc/).
- **Diffrazione semplificata.** Solo Maekawa singola sull'edificio dominante intercettato; **no multi-diffrazione** in cascata, **no diffrazione laterale**, **no riflessioni**.
- **Effetto suolo semplificato.** Modello a G-factor frequenza-indipendente, non l'Agr per banda di ottava del metodo ISO 9613-2 (vedi *Metodo di calcolo*).
- **La qualità della geometria conta più di quella delle quote.** La statistica sulle altezze stimate è utile ma parziale: un edificio **assente** da OSM, una sagoma sbagliata o una posizione spostata pesano di più di due metri di errore su una quota. E la soglia di avviso al 70 % è un'euristica d'interfaccia, non un criterio di validità: un solo edificio stimato male, se è quello che scherma il ricettore critico, basta a spostare il risultato.
- **Dati OSM.** Le altezze edifici da OpenStreetMap sono quasi sempre **inferite o assunte**. La distinzione utile non è fra «reale» e «stimata»: un tag `height` significa che in OSM esiste un'altezza **dichiarata**, non che sia stata misurata, sia aggiornata o abbia precisione nota. La catena di risoluzione, dal dato più autoritativo al più congetturale, è: `height` → `building:height` → `est_height` → numero di piani (`building:levels`, più `roof:levels`/`roof:height` quando ci sono) moltiplicato per un'altezza di piano che dipende dalla tipologia → default per tipologia. Solo il primo gruppo è un'altezza **dichiarata in OSM**: non significa misurata, aggiornata o di precisione nota, ma è comunque il dato meno congetturale. Un'altezza ricavata dai piani è un'inferenza, e il tool la conta come tale. Il default per tipologia ha sostituito il vecchio valore unico di 9 m, che assegnava la stessa quota a una casa, a un capannone e a una chiesa. Il tool dichiara visivamente quali edifici hanno altezza stimata (bordi tratteggiati), mostra la % stimati nelle statistiche, e sopra il 70% di stimati emette un warning.
- **Niente backend.** Il CSV resta nel browser e non viene caricato su alcun server nostro. Non è però vero che nessun dato esca: le query Overpass partono dal tuo browser verso i mirror pubblici OSM (terzi) e portano con sé le coordinate e il bbox dell'area, e i tile della mappa fanno lo stesso.
- **Modello atmosferico semplificato.** ISO 9613-1 con T/RH costanti; niente meteorologia profilata.
- **Statistica "Leq medio" = media aritmetica.** Coerente con la natura del rilievo caricato (campione di misure); per una media energetica servirebbe un'aggregazione diversa.

## Stack tecnico

JavaScript vanilla in single file HTML, librerie vendored localmente (Leaflet 1.9.4, leaflet.heat 0.2.0, papaparse 5.4.1, d3-contour 4.0.2). Motore fisico ISO 9613-2 condiviso con il tool barriere (`@lib/physics/`). Nessun bundler, nessuna dipendenza CDN runtime nel repo standalone.

## Tool collegato

acmap è disponibile anche come **tool web eseguibile** su [/tools/mappa-acustica/](/tools/mappa-acustica/), senza dover scaricare nulla. Il repository GitHub serve a chi vuole vedere il codice, contribuire, o forkare per usi propri.

## Licenza

Apache-2.0 con patent grant. Authorship Stefano Fante personale, maintained come parte delle attività Open Lab di ST-LINE (STLINE S.r.l.)
