vector-tile-pb.js
4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
(function (root, factory){
if (typeof define === 'function' && define.amd){ // AMD
define(factory);
} else if (typeof module !== 'undefined' && module.exports) { // Node.js
module.exports = factory();
} else { // Browser
root.vtpb = factory();
}
})(this, function () {
var tile = {read: readTile, write: writeTile};
tile.GeomType = {
"Unknown": 0,
"Point": 1,
"LineString": 2,
"Polygon": 3
};
function readTile(pbf, end) {
return pbf.readFields(readTileField, {"layers": []}, end);
}
function readTileField(tag, tile, pbf) {
if (tag === 3) tile.layers.push(readLayer(pbf, pbf.readVarint() + pbf.pos));
}
function writeTile(tile, pbf) {
var i;
if (tile.layers !== undefined) for (i = 0; i < tile.layers.length; i++) pbf.writeMessage(3, writeLayer, tile.layers[i]);
}
// value ========================================
tile.value = {read: readValue, write: writeValue};
function readValue(pbf, end) {
return pbf.readFields(readValueField, {}, end);
}
function readValueField(tag, value, pbf) {
if (tag === 1) value.string_value = pbf.readString();
else if (tag === 2) value.float_value = pbf.readFloat();
else if (tag === 3) value.double_value = pbf.readDouble();
else if (tag === 4) value.int_value = pbf.readVarint();
else if (tag === 5) value.uint_value = pbf.readVarint();
else if (tag === 6) value.sint_value = pbf.readSVarint();
else if (tag === 7) value.bool_value = pbf.readBoolean();
}
function writeValue(value, pbf) {
if (value.string_value !== undefined) pbf.writeStringField(1, value.string_value);
if (value.float_value !== undefined) pbf.writeFloatField(2, value.float_value);
if (value.double_value !== undefined) pbf.writeDoubleField(3, value.double_value);
if (value.int_value !== undefined) pbf.writeVarintField(4, value.int_value);
if (value.uint_value !== undefined) pbf.writeVarintField(5, value.uint_value);
if (value.sint_value !== undefined) pbf.writeSVarintField(6, value.sint_value);
if (value.bool_value !== undefined) pbf.writeBooleanField(7, value.bool_value);
}
// feature ========================================
tile.feature = {read: readFeature, write: writeFeature};
function readFeature(pbf, end) {
var feature = pbf.readFields(readFeatureField, {}, end);
if (feature.type === undefined) feature.type = "Unknown";
return feature;
}
function readFeatureField(tag, feature, pbf) {
if (tag === 1) feature.id = pbf.readVarint();
else if (tag === 2) feature.tags = pbf.readPackedVarint();
else if (tag === 3) feature.type = pbf.readVarint();
else if (tag === 4) feature.geometry = pbf.readPackedVarint();
}
function writeFeature(feature, pbf) {
if (feature.id !== undefined) pbf.writeVarintField(1, feature.id);
if (feature.tags !== undefined) pbf.writePackedVarint(2, feature.tags);
if (feature.type !== undefined) pbf.writeVarintField(3, feature.type);
if (feature.geometry !== undefined) pbf.writePackedVarint(4, feature.geometry);
}
// layer ========================================
tile.layer = {read: readLayer, write: writeLayer};
function readLayer(pbf, end) {
return pbf.readFields(readLayerField, {"features": [], "keys": [], "values": []}, end);
}
function readLayerField(tag, layer, pbf) {
if (tag === 15) layer.version = pbf.readVarint();
else if (tag === 1) layer.name = pbf.readString();
else if (tag === 2) layer.features.push(readFeature(pbf, pbf.readVarint() + pbf.pos));
else if (tag === 3) layer.keys.push(pbf.readString());
else if (tag === 4) layer.values.push(readValue(pbf, pbf.readVarint() + pbf.pos));
else if (tag === 5) layer.extent = pbf.readVarint();
}
function writeLayer(layer, pbf) {
if (layer.version !== undefined) pbf.writeVarintField(15, layer.version);
if (layer.name !== undefined) pbf.writeStringField(1, layer.name);
var i;
if (layer.features !== undefined) for (i = 0; i < layer.features.length; i++) pbf.writeMessage(2, writeFeature, layer.features[i]);
if (layer.keys !== undefined) for (i = 0; i < layer.keys.length; i++) pbf.writeStringField(3, layer.keys[i]);
if (layer.values !== undefined) for (i = 0; i < layer.values.length; i++) pbf.writeMessage(4, writeValue, layer.values[i]);
if (layer.extent !== undefined) pbf.writeVarintField(5, layer.extent);
}
return {tile:tile};
});