postgis/postgis/vector_tile.proto
Raúl Marín 99c50d4602 MVT: Improve performance and memory usage
- Reduce memory usage (raises protobuf-c requirement to 1.1).
- Improves performance when merging tiles (from parallel queries).
- Uses protobuf values to reduce the number of transformations and
  memory usage.
- Uses a temporal context when transforming data (reading rows) to
  have a fast way of cleaning up memory before the parallel process
  starts.
- Processes texts and cstrings with each known reading functions
  instead of the `OidOutputFunctionCall` fallback.
- Avoids multiple hash function calls when a value is not found in
  the hash table (once for the lookup and once for the insertion).

Closes https://github.com/postgis/postgis/pull/576
Closes #4737
2020-08-17 18:14:38 +02:00

81 lines
2.7 KiB
Protocol Buffer

syntax = "proto2";
package vector_tile;
option optimize_for = LITE_RUNTIME;
message Tile {
// GeomType is described in section 4.3.4 of the specification
enum GeomType {
UNKNOWN = 0;
POINT = 1;
LINESTRING = 2;
POLYGON = 3;
}
// Variant type encoding
// The use of values is described in section 4.1 of the specification
// PostGIS: Made oneof (protobuf-c 1.1+ required) to reduce memory usage
message Value {
oneof test_oneof {
string string_value = 1;
float float_value = 2;
double double_value = 3;
int64 int_value = 4;
uint64 uint_value = 5;
sint64 sint_value = 6;
bool bool_value = 7;
}
}
// Features are described in section 4.2 of the specification
message Feature {
optional uint64 id = 1 [ default = 0 ];
// Tags of this feature are encoded as repeated pairs of
// integers.
// A detailed description of tags is located in sections
// 4.2 and 4.4 of the specification
repeated uint32 tags = 2 [ packed = true ];
// The type of geometry stored in this feature.
// PostGIS: Made mandatory
required GeomType type = 3 [ default = UNKNOWN ];
// Contains a stream of commands and parameters (vertices).
// A detailed description on geometry encoding is located in
// section 4.3 of the specification.
repeated uint32 geometry = 4 [ packed = true ];
}
// Layers are described in section 4.1 of the specification
message Layer {
// Any compliant implementation must first read the version
// number encoded in this message and choose the correct
// implementation for this version number before proceeding to
// decode other parts of this message.
required uint32 version = 15 [ default = 1 ];
required string name = 1;
// The actual features in this tile.
repeated Feature features = 2;
// Dictionary encoding for keys
repeated string keys = 3;
// Dictionary encoding for values
repeated Value values = 4;
// PostGIS: Made mandatory (see https://github.com/mapbox/vector-tile-spec/issues/47)
required uint32 extent = 5 [ default = 4096 ];
extensions 16 to max;
}
repeated Layer layers = 3;
extensions 16 to 8191;
}