-
Notifications
You must be signed in to change notification settings - Fork 86
Closed
Description
The more I find ideas to improve the sizes of geobuf, the more I realize that we would need to completely rewrite the schema to support the improvements, breaking compatibility. So I'm opening the ticket to start a discussion about what a perfect Geobuf schema would look like (not to say this is a priority, but still a good thing to discuss).
I wrote a prototype schema with all the improvements I could think of here: https://gist.github.com/mourner/3c6ddca04c9772593302
The main difference is utilizing the power and flexibility of the new oneof statement to create a better and more compact schema.
Features:
- the data itself contains information whether it's
Feature,FeatureCollection,GeometryorGeometryCollection, so you don't need to guess this when decoding - keys and values for properties are stored separately in the top-level
Dataobject, and features only store indexes to them (like vector-tile-spec does); keys and possibly values are reduced to unique values Fancy encoding for properties #26 — for much better properties packing - geometry coordinates are a
oneofset of different fields (depending on type), which solves the ambiguity withnullvalues since aoneoffield can be empty (without a default value), and also makes it easier to understand and work with - feature has a
oneofof either geometry or geometry collection instead of repeated geometries - coordinates are stored as delta-encoded
sint32to take full advantage of varint and zig-zag encoding Switch to sint32 for coords #24 — for much more compact geometries Valuemessage is also aoneofof different value types- the property value int type is
sint32instead ofint64— it's more compact and JS doesn't actually handleint64values; in addition, uint type becomesuint32 - the data contains optional flag indicating whether it contains altitude (third coordinate), since this is a global-level setting
- the data also contains optional precision information (6 by default) Configurable precision #25
@tmcw @springmeyer what do you think?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels