CompressedInlinePoints stores a short inline ring segment as polyline bytes.
| Field | Type | Label | Description |
| points | bytes | polyline-encoded point sequence |
| Field | Type | Label | Description |
| points | bytes |
|
|
| holes | CompressedPolygon | repeated |
|
CompressedRingSegment mirrors RingSegment with polyline-encoded inline points.
| Field | Type | Label | Description |
| inline | CompressedInlinePoints |
|
|
| edge_forward | int32 |
|
|
| edge_reversed | int32 |
|
CompressedSharedEdge stores a shared boundary edge with its point sequence
polyline-encoded (delta + zigzag, same algorithm as CompressedPolygon).
| Field | Type | Label | Description |
| id | int32 |
|
|
| points | bytes | polyline-encoded point sequence |
CompressedTimezonesItem designed for binary file as small as possible.
| Field | Type | Label | Description |
| data | CompressedPolygon | repeated |
|
| name | string |
|
| Field | Type | Label | Description |
| method | CompressMethod |
|
|
| timezones | CompressedTimezone | repeated |
|
| version | string |
|
CompressedTopoPolygon mirrors TopoPolygon with compressed ring segments.
| Field | Type | Label | Description |
| exterior | CompressedRingSegment | repeated |
|
| holes | CompressedTopoPolygon | repeated |
|
CompressedTopoTimezone mirrors TopoTimezone with compressed polygons.
| Field | Type | Label | Description |
| polygons | CompressedTopoPolygon | repeated |
|
| name | string |
|
CompressedTopoTimezones combines shared-edge deduplication with polyline
coordinate compression. Shared edge point sequences and inline segments are
stored as polyline bytes instead of repeated Point messages, significantly
reducing file size on top of the deduplication savings.
grid_index is an optional embedded 1°×1° candidate-reduction index built
at compress time. When present, Finder uses it to skip full linear scans.
| Field | Type | Label | Description |
| method | CompressMethod |
|
|
| shared_edges | CompressedSharedEdge | repeated |
|
| timezones | CompressedTopoTimezone | repeated |
|
| version | string |
|
|
| grid_index | GridIndex |
|
GridIndex is the complete 1°×1° candidate-reduction index.
Only cells with at least one intersecting timezone are stored.
| Field | Type | Label | Description |
| cells | GridIndexCell | repeated |
|
| version | string |
|
GridIndexCell records the timezone indices that intersect a single 1°×1° cell.
tz_indices are 0-based positions into the timezones array of the companion
CompressedTopoTimezones (or Timezones) file, matching the order used by Finder.items.
| Field | Type | Label | Description |
| lng | sint32 | floor(longitude), -180..179 |
|
| lat | sint32 | floor(latitude), -90..89 |
|
| tz_indices | uint32 | repeated |
|
Wrapper for a sequence of inline points used inside a RingSegment oneof.
(proto3 does not allow repeated fields directly in a oneof.)
| Field | Type | Label | Description |
| points | Point | repeated |
|
Basic point data define.
| Field | Type | Label | Description |
| lng | float |
|
|
| lat | float |
|
Define a polygon, mostly based on GeoJSON's Polygon define.
Excerpt from RFC-9476 section 'Polygon'
- A linear ring is a closed LineString with four or more positions.
- The first and last positions are equivalent, and they MUST contain
identical values; their representation SHOULD also be identical.
- A linear ring is the boundary of a surface or the boundary of a
hole in a surface.
- A linear ring MUST follow the right-hand rule with respect to the
area it bounds, i.e., exterior rings are counterclockwise, and
holes are clockwise.
Note: the [GJ2008] specification did not discuss linear ring winding
order. For backwards compatibility, parsers SHOULD NOT reject
Polygons that do not follow the right-hand rule.
Though a linear ring is not explicitly represented as a GeoJSON
geometry type, it leads to a canonical formulation of the Polygon
geometry type definition as follows:
- For type "Polygon", the "coordinates" member MUST be an array of
linear ring coordinate arrays.
- For Polygons with more than one of these rings, the first MUST be
the exterior ring, and any others MUST be interior rings. The
exterior ring bounds the surface, and the interior rings (if
present) bound holes within the surface.
[GJ2008]: https://geojson.org/geojson-spec
| Field | Type | Label | Description |
| points | Point | repeated | define the "exterior ring" |
| holes | Polygon | repeated | define the "interior rings" as holes |
PreindexTimezone tile item.
The X/Y/Z are OSM style like map tile index values.
| Field | Type | Label | Description |
| name | string |
|
|
| x | int32 |
|
|
| y | int32 |
|
|
| z | int32 |
|
PreindexTimezones is all preindex timezone's dumps.
| Field | Type | Label | Description |
| idx_zoom | int32 | which zoom value the tiles generated |
|
| agg_zoom | int32 | which zoom value the tiles merge up with. |
|
| keys | PreindexTimezone | repeated |
|
| version | string |
|
A ring segment: either inline points or a reference to a shared edge.
Shared edges are stored once in TopoTimezones.shared_edges and referenced
by their index; edge_reversed references the same edge but traversed in
the opposite direction.
| Field | Type | Label | Description |
| inline | InlinePoints |
|
|
| edge_forward | int32 | index into TopoTimezones.shared_edges (canonical direction) |
|
| edge_reversed | int32 | index into TopoTimezones.shared_edges (reversed direction) |
A shared boundary edge stored once in the global edge library.
Rings reference it by index (forward or reversed) instead of repeating
the point sequence.
| Field | Type | Label | Description |
| id | int32 |
|
|
| points | Point | repeated |
|
Timezone is a timezone's all data.
| Field | Type | Label | Description |
| polygons | Polygon | repeated |
|
| name | string |
|
| Field | Type | Label | Description |
| timezones | Timezone | repeated |
|
| reduced | bool | Reduced data will toggle neighbor search as plan b |
|
| version | string |
|
A timezone polygon in topology format.
The exterior ring is represented as an ordered sequence of segments.
Holes are nested TopoPolygons.
| Field | Type | Label | Description |
| exterior | RingSegment | repeated |
|
| holes | TopoPolygon | repeated |
|
A timezone in topology format.
| Field | Type | Label | Description |
| polygons | TopoPolygon | repeated |
|
| name | string |
|
Timezones in topology format with shared-edge deduplication.
Shared timezone boundaries are stored exactly once in shared_edges;
rings reference them by ID rather than duplicating the point sequences.
This format targets full-precision data where ~43% of boundary edges are
shared, reducing the 96 MB full dataset by ~30–35 MB.
| Field | Type | Label | Description |
| shared_edges | SharedEdge | repeated |
|
| timezones | TopoTimezone | repeated |
|
| version | string |
|
| Name | Number | Description |
| COMPRESS_METHOD_UNSPECIFIED | 0 | |
| COMPRESS_METHOD_POLYLINE | 1 | https://developers.google.com/maps/documentation/utilities/polylinealgorithm |
| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
| double | double | double | float | float64 | double | float | Float | |
| float | float | float | float | float32 | float | float | Float | |
| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| bool | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |