WhereAmI/OSM Binary Format

From OpenStreetMap Wiki
Jump to navigation Jump to search
Logo.png
This page describes a historic artifact in the history of OpenStreetMap. It does not reflect the current situation, but instead documents the historical concepts, issues, or ideas.
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: