[Talk-it] Numeri civici e relazioni

Federico Cozzi f.cozzi at gmail.com
Mon May 4 22:45:18 BST 2009


2009/5/4 Gian Paolo <gianpaolo.pallari at gmail.com>:
> concordo anche io sul problema dell'ereditarietà ma non credi che possano
> essere utili per la semplice attribuzione del "name" (escluso
> dall'ereditarietà) evitando di inserire altri attributi? non dico di non
> dare un nome agli "spezzoni" ma ripeterlo in una relazione mi sembra utile.

Secondo me le relazioni sono una "bomba atomica" da usare con cautela.
Una relazione IMHO deve essere una entità a sé stante rispetto alle
way/punti che contiene: non deve essere "un pezzo" di qualcosa altro.
Cerco di spiegarmi: tutte le informazioni di un ente devono essere
contenute nell'ente stesso, non in altri enti che si riferiscono ad
esso.
L'esempio delle relazioni di tipo route secondo me è chiaro: una
route, che è una collezione di way, ha un nome: ma questo è il nome
della route, non delle singole way di cui la route è composta. Se
voglio sapere qualcosa su una way mi limito a controllare la way
stessa; diverso è il discorso se voglio sapere le proprietà della
route: in quel caso controllo la relazione.

Finché sembra abbastanza innocua la ereditarietà delle proprietà da
una relazione agli enti che essa contiene, la sua pericolosità diventa
più chiara quando ti poni il problema inverso: dato un ente, quali
sono le sue proprietà? In questo caso devi individuare tutte le
relazioni di cui l'ente fa parte e controllare le loro proprietà. Se
poi è permessa l'ereditarietà "a cascata" da A a B a C il discorso
diventa ancora più complesso: dato l'ente C dapprima devi individuare
tutte le relazioni B in cui è contenuto, e poi le relazioni A che
contengono le relazioni B, ecc.

Questo può diventare devastante ad esempio se l'oggetto C è contenuto
nella relazione B che è contenuta nella relazione A che è a sua volta
contenuta nella relazione B !!
Questo esempio di contenimento circolare è pericolosissimo perché:
a. non è possibile evitarlo con le API attuali: ciò nei linguaggi di
programmazione è vietato con un sistema di tipi che regolamenta la
stratificazione degli oggetti, ma in OSM tutte le relazioni sono dello
stesso tipo
b. a questo punto tutti i programmi che maneggiano oggetti OSM devono
essere dotati di algoritmi per l'individuazione dei cicli: bisogna
implementare l'algoritmo in Mapnik, Osmarender, josm, potlatch, tutti
i router e i convertitori di dati OSM in altri formati.

Insomma, visto che tanto bisognerebbe migliorare gli editor per
gestire queste relazioni "fine di mondo", non è più semplice
migliorare gli editor in modo che sia più semplice taggare gli oggetti
di base? Un qualcosa tipo il comando "R" di Potlatch ma potenziato.

Ciao




More information about the Talk-it mailing list