Anatomy of a .KMB File: Binary Serialization Explained
A .kmb (Keyhole Maps Binary) file is a proprietary, closed-source file format developed by MapsWithMe (later Maps.Me) to store geographic waypoints, user descriptions, custom category folders, and GPS track polylines.
Unlike open formats such as KML (which is human-readable XML) or GPX (which is GPS XML), a .kmb file is a densely packed binary stream. If you open a .kmb file in a standard text editor like Notepad or TextEdit, you will see indecipherable raw binary characters.
The Internal Byte Geometry of a .KMB Container
// Maps.Me Binary Serialization Layout
[0x00] Version Magic Byte (0x01, 0x02, or 0x03)
[0x01] Varint: Total Categories Count (N)
βββ Repeat N times: [Varint Length] + [UTF-8 String Category Name]
[Offset] Varint: Total Placemarks Count (M)
βββ Repeat M times:
βββ [4 Bytes] Uint32: Mercator X Coordinate
βββ [4 Bytes] Uint32: Mercator Y Coordinate
βββ [Varint Length] + [UTF-8 String Name]
βββ [Varint Length] + [UTF-8 String Description]
βββ [1 Byte] Uint8: Color Scheme Index (0-7)
βββ [Varint] Category Index Association
[Offset] Varint: Total GPS Tracks Count (T)
βββ Repeat T times: [Track Name] + [Points Array: X, Y, Ele, Time]
Why Coordinates Are Encoded as 32-Bit Integers
To conserve precious mobile device storage and avoid floating-point rounding errors across different CPU architectures (ARM vs x86), Maps.Me does not store coordinates as standard double-precision decimals (e.g., 37.774929, -122.419416).
Instead, the core C++ engine (omim) maps the entire surface of the earth onto a continuous Mercator grid scaled to the integer range of an unsigned 32-bit integer: 0 to 4,294,967,295 (2^32 - 1). To restore standard Latitude and Longitude, MapUnpack applies the inverse Spherical Mercator transformation:
Latitude = (atan(sinh((Y / 4294967296.0) * 2Ο - Ο))) * (180.0 / Ο)
Where Are .KMB Files Stored on Android and iOS?
Because .kmb files are internal database dumps, neither Android nor iOS displays them in your standard gallery. Follow these extraction paths to retrieve them:
In your device's internal storage, navigate to the respective application data folder:
- Maps.Me: /Android/data/com.mapswithme.maps.pro/files/
- Organic Maps: /Android/data/app.organicmaps/files/
Android 11+ Scoped Storage: Due to security restrictions on modern Android versions, the /data/ folder is hidden from regular file managers. You can easily access it by connecting your device to a PC via USB cable (MTP transfer mode) or by launching the native Android system Files app.
Open the Files app > tap On My iPhone > open the Maps.me or Organic Maps directory > open the Bookmarks folder. You can also export directly from the mobile app via the system Share Sheet.
Google My Maps 2000 Points Limit: Prevent File Import Failures
If you try to migrate a large collection of bookmarks from Maps.Me to Google Maps, you will encounter the strict Google My Maps 2000 points limit per layer. When a KML file exceeds 2,000 pins, Google rejects the upload.
Why CloudConvert and Zamzar Cannot Convert .KMB Files
Commercial converter hubs operate generic FFmpeg, LibreOffice, or GDAL backend daemons. Because .kmb is an application-specific binary serializer without an official MIME type or public specification, these enterprise engines reject the file. MapUnpack was custom-built from the open-source cartographic engine to reverse-engineer these specific byte streams directly in your browser. Read our full Migration Guide to move your points to Google Maps.