An open API service indexing awesome lists of open source software.

https://github.com/enricofer/foss4git-djakart

Presentazione a FOSS4G-IT
https://github.com/enricofer/foss4git-djakart

Last synced: about 1 month ago
JSON representation

Presentazione a FOSS4G-IT

Awesome Lists containing this project

README

        

# STRUMENTI DI VERSIONAMENTO DEI DATI GEOGRAFICI

Gestire il flusso di lavoro e tenere traccia delle modifiche dei dati geospaziali con strumenti open source

[(C)2024 CC-BY-SA](https://creativecommons.org/licenses/by-sa/3.0/it/) Enrico Ferreguti [email protected]

--

## Perchè lavorare con le versioni

- per fare delle prove sui dati esistenti
- per tenere traccia storica delle modifiche
- per spiegare le modifiche
- per coordinare le modifiche su vari dataset
- per approvare un pacchetto di modifiche
- per gestire modifiche concorrenti

--

## Campi di applicazione

- Urbanistica

- Reti ed impianti

- Database topografici

## Strategie di versionamento

- copia e rinomina
- frazionare i dati per temi e contesti
- taglia ed incolla

--

## Versionamento in altri ambiti operativi

- Documenti
- BIM/CAD
- Sviluppo Software
- [SVN](https://subversion.apache.org/)
- [GIT](https://git-scm.com/about/)

--

## Strumenti di versionamento geografico opensource

- strumenti a livello di DB [POSTGRES](https://pgxn.org/search?q=version&in=extensions)

- o strumenti basati su [GIT](https://git-scm.com/about/)

- https://geogig.org/

- https://kartproject.org/

--

# Kart

https://kartproject.org/

Basato su git

Strumento a riga di comando per tutti le piattaforme

Consente importazione ed esportazione dei dati in formati aperti

E' distribuito e collaborativo come git

...

--

![](doc/kart_features.png)

--

# WORKFLOW

| INIZIALIZZAZIONE DEL REPOSITORY | MAIN | RAMO A | RAMO B |
| ---------------------------------------------------------- | ------------------ | --------------------------- | --------------------------- |
| `kart init`
`kart create-workingcopy PATH.gpkg`
| | ![](doc/mapplaceholder.svg) | ![](doc/mapplaceholder.svg) |
| `kart import [] []`
| ![](doc/map01.svg) | ![](doc/mapplaceholder.svg) | ![](doc/mapplaceholder.svg) |

--

| CREAZIONE DI UN BRANCH | MAIN | RAMO A | RAMO B |
| ------------------------------------ | ------------------ | ------------------ | --------------------------- |
| `kart checkout -b RAMO_A`
| ![](doc/map01.svg) | ![](doc/map01.svg) | ![](doc/mapplaceholder.svg) |
| `kart commit -m "modifiche A"`
| ![](doc/map01.svg) | ![](doc/map02.svg) | ![](doc/mapplaceholder.svg) |

--

| CREAZIONE DI UN BRANCH | MAIN | RAMO A | RAMO B |
| ------------------------------------ | ------------------ | ------------------ | ------------------ |
| `kart checkout -b RAMO_B`
| ![](doc/map01.svg) | ![](doc/map02.svg) | ![](doc/map01.svg) |
| `kart commit -m "modifiche B"`
| ![](doc/map01.svg) | ![](doc/map02.svg) | ![](doc/map03.svg) |

--

| COMANDI | MAIN | RAMO A | RAMO B |
| ------------------------- | ------------------ | ------------------ | ------------------ |
| `kart merge RAMO_A`
| ![](doc/map02.svg) | ![](doc/map02.svg) | ![](doc/map03.svg) |
| `kart merge RAMO_B`
| ![](doc/map05.svg) | ![](doc/map02.svg) | ![](doc/map03.svg) |

--

| RISOLUZIONE DEI CONFLITTI | MAIN | | RAMO C |
| ------------------------------------------------------------ | ------------------- | --------------------------- | ------------------- |
| `kart commit -m "modifiche B2"`
| ![](doc/map05.svg) | ![](doc/mapplaceholder.svg) | ![](doc/map04.svg) |
| `kart merge RAMO_C`
`kart conflicts`
`kart resolve`
| ![](doc/map05c.svg) | ![](doc/mapplaceholder.svg) | ![](doc/map04c.svg) |

--

| Comandi di configurazione | |
| ------------------------ | ---- |
| `kart init []`
`kart init --workingcopy=PATH.gpkg`
`kart init --workingcopy=postgresql://USER:PASSWD@HOST/DBNAME/DBSCHEMA` | inizializzazione del repository con indicazione della workingcopy |
| `kart create-workingcopy PATH.gpkg` | creazione di una nuova workingcopy |
| **Comandi di import/export** | |
| `kart import [] []` | importazione di dati geospaziali da sorgenti esterne |
| `kart export [] []` | Esportazione di dati geospaziali in formati standard (Geopackage, shapefiles ...) |
| **Registrazione** | |
| `kart commit -m "message"` | registrazione di un pacchetto di modifiche |

--

| Comandi di interrogazione | |
| ----------------------------------- | ------------------------------------------------------------ |
| `kart status` | per ottenere informazioni sul repository e sullo stato della workingcopy |
| `kart log` | per ottenere la storia delle modifiche |
| `kart diff` | per ottenere informazioni sulle differenze tra commit |
| **Comandi di controllo del flusso** | |
| `kart checkout ` | Per ottenere lo stato del repository corrispondente ad un determinato *commit* |
| `kart restore` | per cancellare le modifiche nella *workingcopy* e riportarla allo stato registrato con l'ultimo *commit* |
| `kart reset` | per annullare un pacchetto di modifiche |

--

| Comandi di gestione dei rami | |
| ---------------------------------------------------- | ------------------------------------------------------------ |
| `kart checkout -b ` | Creare un ramo di modifica (*branch*) che raggruppa un insieme coordinato di *commit* |
| `kart checkout ` | Passare da un *branch* all'altro aggiornando la *workingcopy* con le relative modifiche |
| `kart merge ` | Includere un *branch* "figlio" nel *branch* "padre" |
| **Comandi di risoluzione dei conflitti** | |
| `kart conflicts` | Elencare i conflitti di merge |
| `kart resolve` | Risoluzione dei conflitti di merge |
| **Comandi per la gestione di modifiche distribuite** | |
| `kart clone [url_repository]` | Clonare un repository remoto per effettuare delle modifiche locali |
| `kart pull [remote] [branch]` | Importare le modifiche da un repository remoto |
| `kart push [remote] [branch]` | Esportare le modifiche verso un repository remoto |

--

# Kart QGIS plugin

Kart nasce come strumento a riga di comando. Per ovviare alla ridotta operatività e migliorare il controllo sui dati è stato sviluppato un plugin per QGIS https://github.com/koordinates/kart-qgis-plugin/blob/main/docs/index.md

![](doc/qgis_plugin.svg)

--

- il processo di modifica derivato da git consente di controllare ogni aspetto del versionamento (importazione dati/commit-restore/branching e merging)
- consente il versionamento distribuito
-

--

## Il caso "Urbanistica"

- la pianificazione vigente viene servita per la visualizzazione (servizi cartografici) e per la stampa (produzione di pdf) e per analisi e monitoraggi e la catalogazione

- La modifica della pianificazione vigente è in capo al consiglio comunale che adotta un piano e approva le controdeduzioni alle osservazioni dei cittadini nell'ambito della partecipazione. E' quindi una procedura complessa discontinua ed intermittente in cui una variante è in lavorazione per lungo tempo parallelamente ad altre varianti

- La variante può coinvolgere uno o più dataset

- Per ogni variante deve essere possibile esaminare l'assetto complessivo e le variazioni puntuali effettuate

- Deve essere tenuta traccia delle variazioni effettuate

- Modifica, verifica, approvazione, monitoraggio devono poter essere svolti in modo semplice

--

# Djakart

#### A DJAngo wrapper to KART versioning tool

La soluzione applicativa sviluppata per l'ufficio urbanistica del Comune di Padova consente di:

- Gestire versioni di dataset vettoriali usando repository kart, in modo completamente trasparente all'utente
- Organizzare i Dataset in modo Genitore/figlio a partire dal dataset originario
- Disporre delle informazioni in un ambiente multiutente con diritti di modifica/approvazione differenziati
- Proteggere il dataset originario non consentendo la modificabilità diretta se non attrattraverso la creazione di una versione.
- Centralizzare le workingcopy dei vari repository in schemi di un database Postgres
- Centralizzare la gestione delle versioni per facilitare il backup ed il controllo
- Creare un'interfaccia semplice ed amichevole per le principali operazioni di versionamento
- Mette a disposizione la storia del dataset in modo semplice
- Verificare le modifiche ai dataset in modo visuali
- Risolvere i conflitti in modo visuale
- Usare QGIS per editare le modifiche, generando un progetto con le sorgenti dati correttamente pre-configurate con adeguata simbologia ottenuta da un template

--

## Deployment

Da un punto di vista strettamente tecnologico l'applicazione consiste in:

- una webapp sviluppata in django che funge da interfaccia a kart e che consente l'accesso multiutente con diritti di modifica/approvazione differenziati
- Un database postgresql che contiene le workingcopies dei repository amministrati da djakart
- un'istanza di QGIS usato in configurazione server, usato per la visualizzazione dei dataset e la generazione "al volo" dei progetti di QGIS preconfigurati e printi all'uso
- La funzionalità per la creazione "on the fly" del progetto di QGIS è implementata per mezzo di un plugin implementato specificatamente allo scopo, ma che potrebbe essere utile in altre casi d'uso: https://github.com/enricofer/djakart/tree/master/webapp/djakart/otf_qgisserver_plugin
- Orchestrazione delle varie componenti in container docker: https://github.com/enricofer/djakart/blob/master/docker-compose.yml

--

## Elenco Versioni

![](doc/elenco_versioni.png)

--

## Dettagli Versione

![](doc/versione_dettagli.png)

--

## Editing con QGIS

![](doc/djakart_edit.png)

--

## Confronto tra versioni

![](doc/djakart_confronto.gif)

--

## DIFF

![image-20241208133208673](doc/djakart_diff.png)

--

## Risoluzione dei conflitti

![](doc/djakart_conflitti.png)

--

# DJAKART

#### https://github.com/enricofer/djakart

# .... Grazie per l'attenzione!