-
Notifications
You must be signed in to change notification settings - Fork 87
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
,Geometry
orGeometryCollection
, so you don't need to guess this when decoding - keys and values for properties are stored separately in the top-level
Data
object, 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
oneof
set of different fields (depending on type), which solves the ambiguity withnull
values since aoneof
field can be empty (without a default value), and also makes it easier to understand and work with - feature has a
oneof
of either geometry or geometry collection instead of repeated geometries - coordinates are stored as delta-encoded
sint32
to take full advantage of varint and zig-zag encoding Switch to sint32 for coords #24 — for much more compact geometries Value
message is also aoneof
of different value types- the property value int type is
sint32
instead ofint64
— it's more compact and JS doesn't actually handleint64
values; 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?
Metadata
Metadata
Assignees
Labels
No labels