[Gfoss] Automazione pulizia tracce, integrazione, caricamento.

Molto spesso succede di raccogliere tracce ma poi non avere tempo di
pulirle e caricarle subito. Oppure dopo un mapping party è difficile
mettere assieme le tracce dai vari mappatori in modo automatico e
combinare i dati per caricarli sul server. Ho iniziato a definire una
procedure per la pulizia, l'integrazione e il caricamento sul server
in modo automatico, utilizzando alcuni strumenti GIS che ho a
disposizione. Sarebbe bello qualcuno della list GFOSS prendesse gli
stessi passi descritti sotto e riscrivesse la procedura utilizzando
strumenti liberi.

Ditemi cosa pensate e se anche voi avete avuto gli stessi problemi di
*accumulo tracce* che procedura avete adottato al posto della
digitalizzazione manuale in JOSM. Premetto che quanto sottto è per lo
più concettuale anche se implementato così come descritto funziona già
con buoni risultati (per ora solo con tracce lineari (ways) e con
limitato supporto ai tags).

Mi scuso per l'inglese nella lista italiana, ma vorrei presto passare
al wiki e alla lista generale. Mi scuso anche per alcuni termini GIS
troppo specifici della tradizione ESRI.

Parte di questa procedura potrebbe essere altrettanto utilizzata per
import di carattere generale da altri dataset.

A voi la palla

C

----------------

Workflow for Automatic Data Processing and Upload

This process should make it easier to clean and import large amounts
of raw GPS data (e.g. after a mapping party) without having to
manually digitize gpx tracks in JOSM. Also helpful to merge and solve
repeated pass overlaps. Only works with ways (aka lines), within
EPSG:3035 geographic extent. Logger set to record every 1 second, max
speed limit 130km/h (ca 40m/s). MTK chipset with standard accuracy < 3
meters. Implemented using ArcGIS, JOSM, GPSBabel, GlobalMapper,
Python.

01. Download gpx tracks from GPS device(s);

02. Open all gpx files in GlobalMapper, export to shapefile EPSG:3035

03. Import shapefile to geodatabase (for automatic topology attributes)

04. Split line at vertices (this may take a long time, depending on machine)

05. Remove GPS errors, lines > 40 meters (assuming tracker speed was
always <150km/h)

06. Dissolve to single feature

07. Simplify, tolerance 1 meter (this removes unnecessary nodes)

08. Integrate, tolerance 3 meters (collapse overlapping lines into one)

09. Dissolve, save as newtmp.shp feature

10. Open shapefile in GlobalMapper, export to gpx

11. Open gpx in JOSM, download data from server based on gpx extent,
save as existing.osm file

12. Open osm file in GlobalMapper, export to existing.shp

13. Open existing.shp in ArcGIS, make 10 meter buffer

14. Erase from newtmp.shp using buffer (remove all data already mapped in OSM)

15. Make singlepart, save as new.shp (split ways at intersections)

16. Review (and add id and attributes if using shp_to_osm.py script)

17. Export to new.osm using py script or open shp in GlobalMapper,
then export to gpx.

18. Open new.osm or new.gpx in JOSM, review, edit where necessary,
merge with existing

19. Solve conflicts and merge ways.

20. Upload to server.

----------------

2008/8/30 Giovanni Mascellani <g.mascellani@gmail.com>:

A quanto mi sembra di capire sia GlobalMapper che ArcGIS sono software
proprietario... :frowning: Non conosco nel dettaglio cosa fanno e cosa no, ma
non c'è modo di sostituirli?

Infatti è proprio questo il mio obbiettivo. Purtroppo i GFOSSers sono
ancora in vacanza... :stuck_out_tongue:

01. Download gpx tracks from GPS device(s);

E fino a qui ci siamo, GPSBabel (FOSS).

02. Open all gpx files in GlobalMapper, export to shapefile EPSG:3035

ogr2ogr -f GPX -t_srs EPSG:3035 output.shp input.gpx tracks (FOSS).
Ovviamente qualsiasi SRS proiettato che non introduca un errore
superiore a quello del GPS funziona.

03. Import shapefile to geodatabase (for automatic topology attributes)

Portare in PostGIS da GRASS? Da aggiornare ogni volta si modifica il dataset
v.to.db option=length type=line col=linelength units=me

04. Split line at vertices (this may take a long time, depending on machine)

Credo con GRASS, ma non ho trovato. v.clean spezza solo in
corrispondenza di nodi dove si incrociano due o più linee. Serve
qualcosa per spezzare ad ogni nodo in modo da rimuovere tutte le linee
generate per errore da GPS prima di prendere un lock decente.
Ovviamente si può fare a priori con GPSBabel dal NMEA, ma spesso le
tracce arrivano già in GPX.

05. Remove GPS errors, lines > 40 meters (assuming tracker speed was
always <150km/h)

Questo passaggio ovviamente assume che si registri un trackpoint ogni
secondo e non si vada più veloci di 40 m/s. Con una query in OGR si
può fare questo passaggio senza problemi.

06. Dissolve to single feature

Operazione inversa dello step 5, probabilmente non necessaria in altri
ambienti, ArcGIS s'inceppa con troppe linee da semplificare insieme.

07. Simplify, tolerance 1 meter (this removes unnecessary nodes)

Immagino sia v.generalize in GRASS. Lo stesso si potrebbe fare a
priori con GPSBabel e l'opzione "simplify"

08. Integrate, tolerance 3 meters (collapse overlapping lines into one)

Questo serve per collassare tutte le tracce della stessa strada in un
unica mediana. Non ho idea di quale sia lo strumento FOSS da
utilizzare un questo caso.

09. Dissolve, save as newtmp.shp feature

Associato allo step di sopra, fonde tutte le tracce che combaciano una
sull'altra in un unica linea.

10. Open shapefile in GlobalMapper, export to gpx

ogr2ogr, inverso dello step 2.

11. Open gpx in JOSM, download data from server based on gpx extent,
save as existing.osm file

Invece che salvare come OSM e poi esportare in GPX da GlobalMapper ho
notato che con le versioni recenti di JOSM finalmente funziona
l'export diretto a GPX.

12. Open osm file in GlobalMapper, export to existing.shp

ogr2ogr di nuovo.

13. Open existing.shp in ArcGIS, make 10 meter buffer

v.buffer in GRASS?

14. Erase from newtmp.shp using buffer (remove all data already mapped in OSM)

In questo passaggio si usa l'attuale stato del DB più un buffer di 10
metri (valore indicativo dell'errore GPS più quello delle tracce non
registrate accuratemente ogni secondo). Non ho trovato l'equivalente
di questa funzione in GRASS.

15. Make singlepart, save as new.shp (split ways at intersections)

In questo caso si può invece usare v.clean in GRASS

16. Review (and add id and attributes if using shp_to_osm.py script)

QGIS, Python, OGR (FOSS)

17. Export to new.osm using py script or open shp in GlobalMapper,
then export to gpx.

Python oppure di nuovo ogr2ogr

18. Open new.osm or new.gpx in JOSM, review, edit where necessary,
merge with existing

In JOSM si uniscono i dati esistenti con quelli nuovi in un unico file OSM.

19. Solve conflicts and merge ways.

A questo punto si devono "saldare" le parti esistenti con quelle nuove
inportate. Lavoro manuale in JOSM.

20. Upload to server.

Mescolare tutto bene, aggiungere un pò di Python e lasciare cuocere in
forno per 20 minuti.

Chi ha voglia (tempo) di provarci?

C