css | ||
fonts | ||
img | ||
webgis | ||
.gitignore | ||
index.html | ||
README.md |
WebGIS Isola di Capri
Il webGIS è servito dalla cartella webgis/
, che funziona da root per i file JavaScript (cartella js/
), caricati dal relativo index.html
, oltre che per immagini, documenti e layer GeoJSON.
Configurazione
Il webGIS necessita di un singolo file di configurazione (non versionato), che deve trovarsi in webgis/js
ed essere nominato config.js
.
Il file definisce solo gli endpoint di base da utilizzare per le chiamate alla API JSON lato server (che fornisce dati estratti dal database PostgreSQL) in ambiente di sviluppo (dev
) o in produzione (prod
).
La struttura del file deve essere la seguente (gli endpoint riportati sono solo di esempio):
const API_CONFIG = {
dev: 'https://localhost',
prod: 'https://api.example.com'
};
export default API_CONFIG;
Struttura e funzionamento base
Entry point
Il punto d'ingresso dell'applicazione è webgis/js/index.js
che registra i controller Stimulus e inizializza alcune funzioni UI (che potrebbero essere migrate in un controller Stimulus dedicato in futuro).
Mappa
La mappa è gestita con Leaflet dalle funzioni definite nel modulo GIS
(webgis/js/gis.js
) che carica i layer iniziali, inclusi i geoJSON necessari, interroga le API server per recuperare i dati dal database e crea i cluster di puntatori (markers) tramite il plugin Leaflet.markercluster
.
Pseudo-componenti HTML
Il contenuto HTML mostrato nei modali che si aprono cliccando sui puntatori è gestito dinamicamente da pseudo-componenti rappresentati da classi JavaScript che si trovano in webgis/js/components
.
Potrebbe essere utile (o auspicabile) trasformarli in Web Components veri e propri, magari tramite Lit.js. In questo caso, bisognerebbe capire come gestire i dati dinamici all'interno dei template.
Dipendenze
Le dipendenze sono gestite con yarn
, per installarle è sufficiente eseguire yarn
dalla cartella webgis/js
, dove si trova package.json
.
Il file webgis/index.html
contiene una importmap
principalmente per mappare
Photo Sphere Viewer, Three.js (da cui dipende Photo Sphere Viewer) e Stimulus.
CSS
- Bulma
- Fontawesome free
JS
- Leaflet (mappa)
- kalisio/leaflet-graphicscale (plugin Leaflet per scala mappa)
- Leaflet/Leaflet.markercluster (plugin Leaflet per raggruppamenti puntatori)
- Spotlight.js (gallery immagini)
- Photo Sphere Viewer (foto sferiche / panorami)
- Stimulus (UI)
TODO
- Auto-discovery per Stimulus?
- Refactor con app state per evitare oggetti globali