2009/2/12 Giovanni Mascellani <[email protected]>: >> 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 _______________________________________________ Talk-it mailing list [email protected] http://lists.openstreetmap.org/listinfo/talk-it

