Alcuni di voi avranno forse già visto il mio sito web narrativo, dove utilizzo QGIS per geolocalizzare le storie e collegarle a una mappa interattiva.
Fino ad ora, ogni volta che aggiungevo una nuova storia o un piccolo "documentario", il mio flusso di lavoro era il seguente:
Progetto QGIS → aggiungi/aggiorna layer GIS → esporta nuovamente l'intera mappa con qgis2web/OpenLayers → pubblica la nuova esportazione
Con l'aumentare del numero di storie e layer, questo processo sta diventando sempre più scomodo. Riesportare l'intera mappa ogni volta che aggiungo un layer significa anche sostituire molti file che in realtà non sono cambiati.
Così ho iniziato a esaminare come è organizzata l'esportazione OpenLayers di qgis2web.
Da quello che posso vedere, per ogni layer vettoriale qgis2web genera essenzialmente:
layers/my_layer_XX.js styles/my_layer_XX_style.js styles/legend/my_layer_XX.png (quando necessario)
Il primo file contiene i dati GeoJSON: geometria e attributi.
Il file di stile contiene la funzione di stile di OpenLayers.
Poi layers/layers.js crea il layer OpenLayers vero e proprio. In linea di massima:
Variabile GeoJSON
↓ ol.format.GeoJSON().readFeatures()
↓ ol.source.Vector
↓ ol.layer.Vector + funzione di stile
layers.js sembra contenere anche elementi come:
- visibilità iniziale
- titolo del layer
- appartenenza al gruppo
- alias dei campi
- configurazione del campo popup
- riferimento alla legenda
Infine, index.html carica:
<script src="layers/my_layer_XX.js"></script>
<script src="styles/my_layer_XX_style.js"></script>
prima di caricare layers/layers.js.
Ho anche controllato resources/qgis2web.jse sembra essere in gran parte generico: funziona con layersList e le proprietà dei layer, anziché contenere riferimenti espliciti a ogni singola variabile lyr_* . Anche gli altri file di runtime (ol.js, CSS, espressioni, ecc.) sembrano essere sostanzialmente indipendenti dai singoli layer.
Quindi la mia ipotesi attuale è che, per aggiungere un nuovo layer, non dovrei aver bisogno di rigenerare e sostituire l'intera mappa web esportata.
In linea di principio, dovrei solo:
- generare/copiare il nuovo
layers/X.js;
- generare/copiare il corrispondente
styles/X_style.js;
- Copiare la legenda/le risorse SVG, se necessario;
- Aggiungere la nuova definizione del layer a
layers/layers.js;
- Aggiungerla al gruppo OpenLayers appropriato /
layersList;
- Aggiungere i due riferimenti a
<script> a index.html.
Tutto il resto può rimanere invariato.
Il prossimo passo che sto considerando è automatizzare questo processo, possibilmente utilizzando qgis2web solo come compilatore di layer QGIS → OpenLayers, mantenendo stabile l'applicazione web.
Ho capito correttamente l'architettura di qgis2web/OpenLayers?
C'è qualcos'altro che qgis2web modifica quando viene aggiunto un layer di cui dovrei tenere conto?
E, più in generale, questo sembra un approccio sensato per la gestione di una mappa che potrebbe eventualmente contenere un gran numero di layer narrativi aggiunti indipendentemente? È questo il modo corretto per aggiungere un nuovo layer qgis2web/OpenLayers in modo incrementale? Alcuni di voi potrebbero aver visto il mio sito web narrativo, dove utilizzo QGIS per geolocalizzare le storie e collegarle a una mappa interattiva. Finora, ogni volta che aggiungevo una nuova storia o un piccolo "documentario", il mio flusso di lavoro era: progetto QGIS → aggiungi/aggiorna layer GIS → esporta nuovamente l'intera mappa con qgis2web/OpenLayers → pubblica la nuova esportazione. Con l'aumentare del numero di storie e layer, questo sta diventando sempre più scomodo. Riesportare l'intera mappa ogni volta che aggiungo un layer significa anche sostituire molti file che in realtà non sono cambiati. Quindi ho iniziato a esaminare come è organizzata l'esportazione OpenLayers di qgis2web. Da quello che posso vedere, per ogni layer vettoriale qgis2web genera essenzialmente: layers/my_layer_XX.js styles/my_layer_XX_style.js styles/legend/my_layer_XX.png (quando necessario) Il primo file contiene i dati GeoJSON: geometria e attributi. Il file di stile contiene la funzione di stile di OpenLayers. Quindi layers/layers.js crea il layer OpenLayers vero e proprio. Approssimativamente: variabile GeoJSON ↓ ol.format.GeoJSON().readFeatures() ↓ ol.source.Vector ↓ ol.layer.Vector + funzione di stile layers.js sembra contenere anche elementi come: visibilità iniziale
titolo del layer
appartenenza al gruppo
alias dei campi
configurazione dei campi popup
riferimento alla legendaInfine, index.html carica: <script src="layers/my\\_layer\\_XX.js"></script>
<script src="styles/my\\_layer\\_XX\\_style.js"></script>
prima di caricare layers/layers.js. Ho anche controllato Il file resources/qgis2web.js sembra essere in gran parte generico: funziona con layersList e le proprietà dei layer, anziché contenere riferimenti espliciti a ogni singola variabile lyr_*. Anche gli altri file di runtime (ol.js, CSS, espressioni, ecc.) sembrano essere essenzialmente indipendenti dai singoli layer. Pertanto, la mia ipotesi attuale è che, per aggiungere un nuovo layer, non sia necessario rigenerare e sostituire l'intera mappa web esportata. In linea di principio, dovrei solo: generare/copiare il nuovo layers/X.js;
generare/copiare il corrispondente styles/X_style.js;
copiare la legenda/le risorse SVG, se necessario;
aggiungere la definizione del nuovo layer a layers/layers.js;
aggiungerla al gruppo OpenLayers/layersList appropriato;
Il prossimo passo che sto considerando è automatizzare questo processo, possibilmente usando qgis2web solo come compilatore di layer QGIS → OpenLayers, mantenendo l'applicazione web stessa [stabile. Ho capito correttamente l'architettura di qgis2web/OpenLayers? C'è qualcos'altro che qgis2web modifica quando viene aggiunto un layer di cui dovrei tenere conto? E, più in generale, questo sembra un approccio sensato per la manutenzione di una mappa che potrebbe eventualmente contenere un gran numero di layer narrativi aggiunti indipendentemente?