IT:OSM XML
Introduzione
I file .osm sono in formato XML e rappresentano i dati di OpenStreetMap. Sono rappresentati nodi, vie e relazioni (Data Primitives) insieme alle relative etichette (tag). Un file .osm può anche includere dei gruppi di modifiche (changesets).
Il file planet.osm è il più grande, contiene l'intero pianeta Terra (una fotografia di tutti i nodi, le vie, le relazioni della base dati). Esistono anche file .osm per aree più piccole, chiamati estratti. Usando l'API bbox request si ottiene un file in questo formato. Gli estratti di regioni e comuni italiani sono disponibili su http://osm-estratti.wmflabs.org/estratti/
L'editor di mappe JOSM usa l'estensione .osm (formato file JOSM) sia per i dati appena scaricati dal server che per quelli salvati in locale (dati modificati non caricati sul server). Questi ultimi possiedono numeri di identificazione negativi che identificano i nuovi oggetti creati, oltre ai diversi attributi per le azioni come ad esempio action="delete" per gli elementi eliminati.
Esistono diversi modi per scaricare i dati .osm: get .osm data.
Variazioni
Il formato non è mai stato specificato formalmente. Si rende quindi necessaria un'attenta analisi prima di implementare strumenti di decodificazione per questi file.
Ci sono alcune differenze tra i programmi più comuni che creano file .osm:
- Le API e JOSM usano l'elemento
bounds
. Osmosis e Planet.osm includono l'elementobound
con due attributi:box="-90,-180,90,180"
eorigin
. - L'attributo
visible
non è incluso in planet.osm e gli altri strumenti lo scrivono solo se èfalse
. Il meglio per testarne l'esistenza è assumere come defaulttrue
. user
euid
potrebbero non essere presenti perchè in passato era possibile nascondere l'identità di chi compiva le modifiche al pubblico. Anche se non è più possibile, questo si potrebbe incontrare in alcuni elementi vecchi o non modificati da tempo.- Esiste un attributo opzionale
num_changes
per i Changesets (E' stato rimosso dallo strumento di esportazione della cronologia delle modifiche per la sua inconsistenza). - Ci potrebbero essere più versione di uno stesso elemento in un file .osm e l'ordine degli elementi non è sempre lo stesso.
- JOSM salva i file nel formato JOSM format, che non include
timestamp
,version
ochangeset
per gli elementi nuovi. Può essere presente l'attributoaction
. JOSM include anche l'attributovisible="true"
attribute.
Si possono controllare le pagine XSD e DTD per dettagli sui tentativi di definire il formato in questi linguaggi.
Esempio
Questo è un esempio di un file .osm molto semplice. Per altre informazioni sul significato dei diversi elementi XML si veda Data Primitives
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="OpenStreetMap server">
<bounds minlat="51.5073601795557" minlon="-0.108157396316528" maxlat="51.5076406454029" maxlon="-0.107599496841431"/>
<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z"/>
<node id="319408587" lat="51.5074343" lon="-0.1081264" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z"/>
<node id="275452090" lat="51.5075933" lon="-0.1076186" version="3" changeset="2980587" user="nickb" uid="1697" visible="true" timestamp="2009-10-29T12:14:35Z">
<tag k="name" v="Jam's Sandwich Bar"/>
<tag k="amenity" v="cafe"/>
</node>
<node id="304994980" lat="51.5074645" lon="-0.1075735" version="2" changeset="388960" user="BiIbo" uid="3516" visible="true" timestamp="2009-02-13T00:41:47Z">
<tag k="barrier" v="gate"/>
</node>
<node id="304994981" lat="51.5074723" lon="-0.1075014" version="1" changeset="374143" user="Matt" uid="70" visible="true" timestamp="2008-10-16T16:35:57Z"/>
<node id="304994979" lat="51.507406" lon="-0.1083348" version="4" changeset="2114003" user="jamicu" uid="38244" visible="true" timestamp="2009-08-12T01:33:32Z"/>
<way id="27776903" visible="true" timestamp="2009-05-31T13:39:15Z" version="3" changeset="1368552" user="Matt" uid="70">
<nd ref="304994979"/>
<nd ref="319408587"/>
<nd ref="319408586"/>
<nd ref="304994980"/>
<nd ref="304994981"/>
<tag k="access" v="private"/>
<tag k="highway" v="service"/>
</way>
</osm>
In questo esempio si vedono i dati usciti da questa richiesta: :http://api.openstreetmap.org/api/0.6/map?bbox=-0.108157396316528,51.5073601795557,-0.107599496841431,51.5076406454029