WhereAmI/OSM Binary Format
- About
- The OSM Binary Format was the data format, the WhereAmI, a map application for SymbianOS, used.
- Impact on OpenStreetMap
- It was one of the multiple attempts to find a more performant file format for OSM vector data compared to PBF. Nowadays (2020), .osm.pbf format is adopted.
- Reason for being historic
- There is no other known application using this file format.
- Captured time
- February 2020
OSM Binary Format
This is an alternative to the xml format commonly used for distribution of OSM map data. There are also a set of related additions for use in a mobile context OSM Mobile Binary Protocol.
Note that this format is rarely used as a general purpose binary format, for which PBF Format is preferred.
It is not related to OSMbin.
The Format
The formats base structure is a series of binary blocks, which specify their length followed by a type followed by encoded data.
- Length - 32bit unsigned integer length (length does not include the 4 bytes used to specify the length)
- Type - 8bit unsigned integer type (as defined in Types)
- Data - binary data any format
To save space long/lat values are encoded as 32bit signed integers from the floating point values to six decimal places (eg lat/lon * 1000000). This gives ~11cm accuracy which is plenty for any mapping project. Time/Date fields are the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). Strings are truncated to 255 and are given as a length followed by characters utf8 encoded.
OSM nodes are not transmitted in their entirety, only interesting nodes are included, (nodes with some additional meta data - poi's).
Ways reduce the data needed to be transmitted by only sending the positions of nodes as long/lat pairs, the first long/lat pair using 32bits then subsequent ones are 16bit diffs from the previous node position, if the diff is too big then fake nodes filling the gap are given.
Header
[block length=0x02 0x00 0x00 0x00] 0x05 0x3B
This is an optional 6 byte header at the beginning of an OSM Binary format file. (decided because: 0=O, 5=S, 3=M, B=B)
This just indicates that the content is obf for use in file type recognisers and such.
POIs
- Length (32bit)
- Type - 'i' (8bit)
- Node Id (64bit)
- Longitude (32bit)
- Latitude (32bit)
- Primary property (8bit) see Node Property
- Feature Tags (optional) see Feature Tags
Ways
- Length (32bit)
- Type - 'w' (8bit)
- Way Id (32bit)
- Node Count (32bit)
- Longitude (32bit)
- Latitude (32bit)
- Followed by:
- Longitude Diff (16bit)
- Latitude Diff (16bit)
- Feature Tags see Feature Tags
Relations
- Length (32bit)
- Type - 'r' (8bit)
- Relation Id (32bit)
- Relation Type (8bit) see Relations Types
- Members Count (32bit)
- Followed by:
- Member Type/Role (8bit) see Relations Roles
- Member Id (32bit way id/64bit poi id) (repeated as necessary)
- Feature Tags see Feature Tags
Usage and intended use
The OSM binary format is intended for the following types of clients:
- mapping programs
It is not intended for:
It is optimized for:
- general usage
This format is supported by the following clients: