[Talk-it] [Gfoss] Fondazione, licenza, trasparenza, conti

Federico Cozzi f.cozzi at gmail.com
Thu Feb 12 10:02:53 GMT 2009


2009/2/12 Giovanni Mascellani <g.mascellani at gmail.com>:
>> Vero per il singolo, ma non mi pare che ci sia un modo per ricostruire
>> come sono state spezzate le way.

Mi sembra un'obiezione già sentita ;-)

> Effettivamente non ci avevo pensato: ma sarebbe invece possibile capire
> questa cosa a partire dalle tabelle di history del database?

Ieri sera stavo studiando le API 0.5 di OSM allo scopo e mi sembra che
la risposta sia no.
Le API forniscono metodi per creare o modificare una way (+ altre
operazioni non di nostro interesse):
-per creare una way, passi una way al server e lui ti restituisce l'ID
della nuova way
-per modificare una way, passi al server sia l'ID che la way e lui la modifica

A questo punto mi sembra di capire che lo spezzamento di una way sia
un'operazione client-side, non server-side, cioè ipoteticamente
JOSM/Potlatch fanno così (bisognerebbe leggere i sorgenti, ma vedi
sotto (*)):
-l'utente spezza una way esistente (ad es. ID=1)
-JOSM pensa che la way 1 sia stata modificata (tolti dei punti) e sia
stata creata la nuova way -1 (con i punti tolti alla way 1)
-JOSM dice al server di modificare la way 1 e di creare la nuova way -1
Sul server a questo punto non ci sono legami ovvi tra le due way.

(*) Questa supposizione mi sembra ragionevole perché una volta ho
avuto problemi di connessione con potlatch e, dopo lo spezzamento di
una way, mi sono trovato con due way: la way *originale* (cioè non
spezzata) e una way che corrispondeva ad uno dei due spezzamenti. Cioè
come se le operazioni venissero fatte in questo ordine:
1. creazione della nuova way che corrisponde al segmento A
2. modifica della way esistente che corrisponde al segmento B
(e la connessione era saltata tra 1 e 2)

Probabilmente con le API 0.6 si riuscirà a capire che le operazioni 1
e 2, essendo avvenute all'interno di una singola "transazione", sono
in realtà derivanti da uno spezzamento. Ma con le API 0.5 e precedenti
(cioè tutto il DB OSM attuale) l'unico modo che vedo è usare una
euristica: se la way A è stata creata e la way B è stata modificata in
un breve lasso di tempo dallo stesso autore, e A+B ricomposte
assomigliano a B precedentemente, allora è uno spezzamento.
Ma questa euristica vacilla davanti ad operazioni più complesse che
sono avvenute sul client dopo lo spezzamento e prima del commit su DB
(ad esempio se una delle due way è stata spostata, o se sono stati
aggiunti punti), e in ogni caso mi sembra computazionalmente un
delirio.

Ciao




More information about the Talk-it mailing list