# Leaflet

Leaflet è una libreria JavaScript per sviluppare mappe geografiche interattive (WebGIS). Sviluppato dal 2010, supporta la maggior parte dei browser e degli standard HTML5 e CSS3.
Leaflet permette di mostrare punti di interesse, linee o aree, o strutture dati come file GeoJSON, o livelli interattivi, su una mappa a tasselli.
L'autore è Vladimir Agafonkin, collaboratore MapBox dal 2013.

## Utilizzi

Un utilizzo tipico di Leaflet è l'inserimento di una mappa all'interno di un elemento HTML. Punti di interesse (markers) e livelli (layers) possono essere aggiunti successivamente.
Le API della libreria sono registrate nella variabile L.

## Funzionalità

Leaflet supporta i livelli Web Map Service (WMS), i livelli GeoJSON, i livelli vettoriali e i livelli a tasselli. Le funzionalità possono essere estese attraverso plugin.

### Elementi

Alcuni elementi che definiscono una mappa Leaflet:
* Tipi raster (TileLayer and ImageOverlay)
* Tipi vettoriali (Vector) (Path, Polygon, e tipi specifici come Circle)
* Tipi di raggruppamento (LayerGroup, FeatureGroup and GeoJSON)
* Controlli (Zoom, Layers, etc.)
Ci sono ulteriori classi per la proiezione, trasformazione e interazione col DOM.

### Supporto ai formati GIS

Leaflet supporta alcuni formati GIS standard, estendibili attraverso plugin.
| Standard | Supporto |
| GeoJSON | Completo, attraverso la funzione L.geoJson |
| KML, CSV, WKT, TopoJSON, GPX | Supportato dal plugin Leaflet-Omnivore |
| WMS | Supporto principale attraverso il tipo TileLayer.WMS |
| WFS | Non supportato ma esistono plugin. |
| GML | Non supportato. |

### Browser supportati

Leaflet 0.7 supporta Chromium, Google Chrome, Mozilla Firefox, Safari 5+, Opera 12+ e 7-11.

## Paragone con altre librerie

Leaflet e OpenLayers sono entrambe librerie JavaScript lato client ed entrambe software libero. Leaflet è più piccola (circa 7.000 righe di codice) rispetto ad OpenLayers (circa 230.000 righe di codice) al 2015. Il peso di Leaflet è minore rispetto a quello di OpenLayers (circa 123KB contro 423KB) e il suo codice sorgente sfrutta funzionalità JavaScript più recenti, insieme all'HTML5 e CSS3, ciò nonostante manca di alcune funzionalità di cui OpenLayers invece dispone, come il supporto ai Web Feature Service (WFS) e il supporto nativo a standard di proiezione diversi da Web Mercator (EPSG 3857).
Altri strumenti proprietari come Google Maps API (lanciato nel 2005) e le Bing Maps Platform API necessitano di una significativa integrazione lato server per fornire i medesimi servizi.

## Storia

Leaflet nasce nel 2010 come libreria JavaScript per CloudMade, un fornitore di mappe dove Agafonkin lavorava a quel tempo. In maggio 2011, CloudMade annunciò il primo rilascio di Leaflet, creata praticamente da zero.
* 0.1: 17 maggio 2011
* 0.2: 18 giugno 2011
* 0.3: 14 febbraio 2012
* 0.4: 30 luglio 2012
* 0.5: 17 gennaio 2013
Fra altri miglioramenti, questo rilascio ha introdotto il supporto al Retina Display.
* 0.6: 26 giugno 2013
Questo rilascio ha introdotto il supporto agli eventi e al formato GeoJSON. Fu sviluppato in occasione di un evento promosso da Mapbox, in soli 2 giorni.
* 0.7: 22 novembre 2013
Un aggiornamento di refactoring.
* 1.0: 27 settembre 2016
Questo aggiornamento contiene oltre 400 cambiamenti rispetto alla v0.7.7. I più significativi:
* Miglioramento delle performance.
* Animazioni per lo zoom e lo spostamento.
* Supporto a livelli di zoom frazionari.
* Migliorato l'algoritmo di gestione dei tasselli della mappa.
* Pannelli personalizzati.
* Migliore supporto alle proiezioni non-standard.
* Maggiore accessibilità.
* Migliorata la documentazione del software.
* Migliorata la stabilità.