Protocol Documentation

Table of Contents

tzf/v1/tzinfo.proto

Top

CompressedInlinePoints

CompressedInlinePoints stores a short inline ring segment as polyline bytes.

FieldTypeLabelDescription
points bytes

polyline-encoded point sequence

CompressedPolygon

FieldTypeLabelDescription
points bytes

holes CompressedPolygon repeated

CompressedRingSegment

CompressedRingSegment mirrors RingSegment with polyline-encoded inline points.

FieldTypeLabelDescription
inline CompressedInlinePoints

edge_forward int32

edge_reversed int32

CompressedSharedEdge

CompressedSharedEdge stores a shared boundary edge with its point sequence

polyline-encoded (delta + zigzag, same algorithm as CompressedPolygon).

FieldTypeLabelDescription
id int32

points bytes

polyline-encoded point sequence

CompressedTimezone

CompressedTimezonesItem designed for binary file as small as possible.

FieldTypeLabelDescription
data CompressedPolygon repeated

name string

CompressedTimezones

FieldTypeLabelDescription
method CompressMethod

timezones CompressedTimezone repeated

version string

CompressedTopoPolygon

CompressedTopoPolygon mirrors TopoPolygon with compressed ring segments.

FieldTypeLabelDescription
exterior CompressedRingSegment repeated

holes CompressedTopoPolygon repeated

CompressedTopoTimezone

CompressedTopoTimezone mirrors TopoTimezone with compressed polygons.

FieldTypeLabelDescription
polygons CompressedTopoPolygon repeated

name string

CompressedTopoTimezones

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.

FieldTypeLabelDescription
method CompressMethod

shared_edges CompressedSharedEdge repeated

timezones CompressedTopoTimezone repeated

version string

grid_index GridIndex

GridIndex

GridIndex is the complete 1°×1° candidate-reduction index.

Only cells with at least one intersecting timezone are stored.

FieldTypeLabelDescription
cells GridIndexCell repeated

version string

GridIndexCell

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.

FieldTypeLabelDescription
lng sint32

floor(longitude), -180..179

lat sint32

floor(latitude), -90..89

tz_indices uint32 repeated

InlinePoints

Wrapper for a sequence of inline points used inside a RingSegment oneof.

(proto3 does not allow repeated fields directly in a oneof.)

FieldTypeLabelDescription
points Point repeated

Point

Basic point data define.

FieldTypeLabelDescription
lng float

lat float

Polygon

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

FieldTypeLabelDescription
points Point repeated

define the "exterior ring"

holes Polygon repeated

define the "interior rings" as holes

PreindexTimezone

PreindexTimezone tile item.

The X/Y/Z are OSM style like map tile index values.

FieldTypeLabelDescription
name string

x int32

y int32

z int32

PreindexTimezones

PreindexTimezones is all preindex timezone's dumps.

FieldTypeLabelDescription
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

RingSegment

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.

FieldTypeLabelDescription
inline InlinePoints

edge_forward int32

index into TopoTimezones.shared_edges (canonical direction)

edge_reversed int32

index into TopoTimezones.shared_edges (reversed direction)

SharedEdge

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.

FieldTypeLabelDescription
id int32

points Point repeated

Timezone

Timezone is a timezone's all data.

FieldTypeLabelDescription
polygons Polygon repeated

name string

Timezones

FieldTypeLabelDescription
timezones Timezone repeated

reduced bool

Reduced data will toggle neighbor search as plan b

version string

TopoPolygon

A timezone polygon in topology format.

The exterior ring is represented as an ordered sequence of segments.

Holes are nested TopoPolygons.

FieldTypeLabelDescription
exterior RingSegment repeated

holes TopoPolygon repeated

TopoTimezone

A timezone in topology format.

FieldTypeLabelDescription
polygons TopoPolygon repeated

name string

TopoTimezones

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.

FieldTypeLabelDescription
shared_edges SharedEdge repeated

timezones TopoTimezone repeated

version string

CompressMethod

NameNumberDescription
COMPRESS_METHOD_UNSPECIFIED 0

COMPRESS_METHOD_POLYLINE 1

https://developers.google.com/maps/documentation/utilities/polylinealgorithm

Scalar Value Types

.proto TypeNotesC++JavaPythonGoC#PHPRuby
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)