Salvataggio di dati vettoriali
Il passaggio successivo alla creazione o alla modifica di elementi vettoriali è il salvataggio dei dati. Normalmente questo avviene inviando i dati ad un servizio esposto da un’applicazione lato server, che provvederà a salvarli in qualche forma. Il metodo più comunemente utilizzato per l’invio dei dati consiste nella loro serializzazione, lato client, in un formato standard come il GeoJSON o il GML e l’invio come payload di una chiamata HTTP POST.
Serializzazione e salvataggio
OpenLayers, tramite i suoi formati ol.format.GeoJSON
e ol.format.GML2
e ol.format.GML3
ci fornisce tutto il necessario per trasformare un array di ol.Features
nella loro relativa rappresentazione testuale, pronta per essere inviata al server.
Uno volta ottenuto il dato serializzato starà a noi gestirne l’invio, ad esempio tramite XMLHTTPRequest con l’ausilio di jQuery:
Niente vieta tuttavia di salvare i dati anche sul proprio computer. Nel seguente esempio è possibile disegnare una serie di elementi lineari e di salvarli localmente in formato GeoJSON. Potete verificarne il risultato con un qualsiasi software GIS (ad esempio QGIS).
1
2
3
4
5
var data = "data:text/json;charset=utf-8," + poligoniGeoJSON;
var downloadLink = $("#link");
downloadLink.prop("href",data);
downloadLink.prop("download","poligoni.geojson");
downloadLink[0].click();
- Costruisco una stringa di rappresentazione di un Content-Type testuale (il nostro GeoJSON).
- Assegno la stringa ad un elemento anchor (
<a>
) nascosto ma presente nel DOM della pagina. - Assegno anche la proprietà
download
per definire il nome con cui salvare i dati. - Simulo un click sul link nascosto.
A questo punto si aprirà la classica finestra di salvataggio che ci chiederà di salvare il file “poligoni.geojson”.
WFS-T
Solo un rapido accenno al protocollo standard WFS-T. Questo tipo di servizio, offerto da diversi server cartografici (ad esempio Geoserver e QGIS Server), permette di eseguire operazioni di aggiunta, modifica e rimozione degli elementi vettoriali di uno strato esposto come layer WFS.
OpenLayers, tramite ol.format.WFS
, fornisce due metodi dedicati alle transazioni WFS-T:
- ol.format.WFS.writeTransaction(inserts, updates, deletes, options): viene avviata una transazione con il server, nella quale possono essere trasmesse le features inserite, modificate e/o rimosse. Tra le opzioni di base richieste ci sono il CRS e il nome del layer (sul server):
- srsName: codice ESPG
- featureType: id del layer wfs
- ol.format.WFS.readTransactionResponse: normalizza la gestione della risposta XML ottenuta dal server al termine della transazione
Immaginando di avere un WFS esposto da QGIS Server, e un layer “aree_amministrative” (EPSG:3857) su cui sono abilitate le modifiche tramite WFS-T, potremmo usare il seguente codice per eseguire la transazione:
Nella funzione di esempio save
vengono distinte le azioni, e per ognuna di esse viene generato il messaggio XML necessario ad eseguire la transazione sul server.