UNPKG

4.09 kBJavaScriptView Raw
1'use strict';
2
3// Tile ========================================
4
5var Tile = exports.Tile = {read: readTile, write: writeTile};
6
7Tile.GeomType = {
8 "UNKNOWN": 0,
9 "POINT": 1,
10 "LINESTRING": 2,
11 "POLYGON": 3
12};
13
14function readTile(pbf, end) {
15 return pbf.readFields(readTileField, {"layers": []}, end);
16}
17
18function readTileField(tag, tile, pbf) {
19 if (tag === 3) tile.layers.push(readLayer(pbf, pbf.readVarint() + pbf.pos));
20}
21
22function writeTile(tile, pbf) {
23 var i;
24 if (tile.layers !== undefined) for (i = 0; i < tile.layers.length; i++) pbf.writeMessage(3, writeLayer, tile.layers[i]);
25}
26
27// Value ========================================
28
29Tile.Value = {read: readValue, write: writeValue};
30
31function readValue(pbf, end) {
32 return pbf.readFields(readValueField, {}, end);
33}
34
35function readValueField(tag, value, pbf) {
36 if (tag === 1) value.string_value = pbf.readString();
37 else if (tag === 2) value.float_value = pbf.readFloat();
38 else if (tag === 3) value.double_value = pbf.readDouble();
39 else if (tag === 4) value.int_value = pbf.readVarint64();
40 else if (tag === 5) value.uint_value = pbf.readVarint();
41 else if (tag === 6) value.sint_value = pbf.readSVarint();
42 else if (tag === 7) value.bool_value = pbf.readBoolean();
43}
44
45function writeValue(value, pbf) {
46 if (value.string_value !== undefined) pbf.writeString(1, value.string_value);
47 if (value.float_value !== undefined) pbf.writeFloat(2, value.float_value);
48 if (value.double_value !== undefined) pbf.writeDouble(3, value.double_value);
49 if (value.int_value !== undefined) pbf.writeVarint(4, value.int_value);
50 if (value.uint_value !== undefined) pbf.writeVarint(5, value.uint_value);
51 if (value.sint_value !== undefined) pbf.writeSVarint(6, value.sint_value);
52 if (value.bool_value !== undefined) pbf.writeBoolean(7, value.bool_value);
53}
54
55// Feature ========================================
56
57Tile.Feature = {read: readFeature, write: writeFeature};
58
59function readFeature(pbf, end) {
60 var feature = pbf.readFields(readFeatureField, {}, end);
61 if (feature.type === undefined) feature.type = "UNKNOWN";
62 return feature;
63}
64
65function readFeatureField(tag, feature, pbf) {
66 if (tag === 1) feature.id = pbf.readVarint();
67 else if (tag === 2) feature.tags = pbf.readPackedVarint();
68 else if (tag === 3) feature.type = pbf.readVarint();
69 else if (tag === 4) feature.geometry = pbf.readPackedVarint();
70}
71
72function writeFeature(feature, pbf) {
73 if (feature.id !== undefined) pbf.writeVarint(1, feature.id);
74 if (feature.tags !== undefined) pbf.writePackedVarint(2, feature.tags);
75 if (feature.type !== undefined) pbf.writeVarint(3, feature.type);
76 if (feature.geometry !== undefined) pbf.writePackedVarint(4, feature.geometry);
77}
78
79// Layer ========================================
80
81Tile.Layer = {read: readLayer, write: writeLayer};
82
83function readLayer(pbf, end) {
84 return pbf.readFields(readLayerField, {"features": [], "keys": [], "values": []}, end);
85}
86
87function readLayerField(tag, layer, pbf) {
88 if (tag === 15) layer.version = pbf.readVarint();
89 else if (tag === 1) layer.name = pbf.readString();
90 else if (tag === 2) layer.features.push(readFeature(pbf, pbf.readVarint() + pbf.pos));
91 else if (tag === 3) layer.keys.push(pbf.readString());
92 else if (tag === 4) layer.values.push(readValue(pbf, pbf.readVarint() + pbf.pos));
93 else if (tag === 5) layer.extent = pbf.readVarint();
94}
95
96function writeLayer(layer, pbf) {
97 if (layer.version !== undefined) pbf.writeVarint(15, layer.version);
98 if (layer.name !== undefined) pbf.writeString(1, layer.name);
99 var i;
100 if (layer.features !== undefined) for (i = 0; i < layer.features.length; i++) pbf.writeMessage(2, writeFeature, layer.features[i]);
101 if (layer.keys !== undefined) for (i = 0; i < layer.keys.length; i++) pbf.writeString(3, layer.keys[i]);
102 if (layer.values !== undefined) for (i = 0; i < layer.values.length; i++) pbf.writeMessage(4, writeValue, layer.values[i]);
103 if (layer.extent !== undefined) pbf.writeVarint(5, layer.extent);
104}