Files
sdk4_demo/example/js/pbf.js
2025-07-03 15:12:58 +08:00

888 lines
24 KiB
JavaScript

/**
* Minified by jsDelivr using Terser v5.19.2.
* Original file: /npm/pbf@4.0.1/index.js
*
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
*/
const SHIFT_LEFT_32 = 4294967296, SHIFT_RIGHT_32 = 1 / 4294967296, TEXT_DECODER_MIN_LENGTH = 12,
utf8TextDecoder = "undefined" == typeof TextDecoder ? null : new TextDecoder("utf-8"), PBF_VARINT = 0,
PBF_FIXED64 = 1, PBF_BYTES = 2, PBF_FIXED32 = 5;
class Pbf {
constructor(t = new Uint8Array(16)) {
this.buf = ArrayBuffer.isView(t) ? t : new Uint8Array(t), this.dataView = new DataView(this.buf.buffer), this.pos = 0, this.type = 0, this.length = this.buf.length
}
readFields(t, e, i = this.length) {
for (; this.pos < i;) {
const i = this.readVarint(), s = i >> 3, r = this.pos;
this.type = 7 & i, t(s, e, this), this.pos === r && this.skip(i)
}
return e
}
readMessage(t, e) {
return this.readFields(t, e, this.readVarint() + this.pos)
}
readFixed32() {
const t = this.dataView.getUint32(this.pos, !0);
return this.pos += 4, t
}
readSFixed32() {
const t = this.dataView.getInt32(this.pos, !0);
return this.pos += 4, t
}
readFixed64() {
const t = this.dataView.getUint32(this.pos, !0) + 4294967296 * this.dataView.getUint32(this.pos + 4, !0);
return this.pos += 8, t
}
readSFixed64() {
const t = this.dataView.getUint32(this.pos, !0) + 4294967296 * this.dataView.getInt32(this.pos + 4, !0);
return this.pos += 8, t
}
readFloat() {
const t = this.dataView.getFloat32(this.pos, !0);
return this.pos += 4, t
}
readDouble() {
const t = this.dataView.getFloat64(this.pos, !0);
return this.pos += 8, t
}
readVarint(t) {
const e = this.buf;
let i, s;
return s = e[this.pos++], i = 127 & s, s < 128 ? i : (s = e[this.pos++], i |= (127 & s) << 7, s < 128 ? i : (s = e[this.pos++], i |= (127 & s) << 14, s < 128 ? i : (s = e[this.pos++], i |= (127 & s) << 21, s < 128 ? i : (s = e[this.pos], i |= (15 & s) << 28, readVarintRemainder(i, t, this)))))
}
readVarint64() {
return this.readVarint(!0)
}
readSVarint() {
const t = this.readVarint();
return t % 2 == 1 ? (t + 1) / -2 : t / 2
}
readBoolean() {
return Boolean(this.readVarint())
}
readString() {
const t = this.readVarint() + this.pos, e = this.pos;
return this.pos = t, t - e >= 12 && utf8TextDecoder ? utf8TextDecoder.decode(this.buf.subarray(e, t)) : readUtf8(this.buf, e, t)
}
readBytes() {
const t = this.readVarint() + this.pos, e = this.buf.subarray(this.pos, t);
return this.pos = t, e
}
readPackedVarint(t = [], e) {
const i = this.readPackedEnd();
for (; this.pos < i;) t.push(this.readVarint(e));
return t
}
readPackedSVarint(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readSVarint());
return t
}
readPackedBoolean(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readBoolean());
return t
}
readPackedFloat(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readFloat());
return t
}
readPackedDouble(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readDouble());
return t
}
readPackedFixed32(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readFixed32());
return t
}
readPackedSFixed32(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readSFixed32());
return t
}
readPackedFixed64(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readFixed64());
return t
}
readPackedSFixed64(t = []) {
const e = this.readPackedEnd();
for (; this.pos < e;) t.push(this.readSFixed64());
return t
}
readPackedEnd() {
return 2 === this.type ? this.readVarint() + this.pos : this.pos + 1
}
skip(t) {
const e = 7 & t;
if (0 === e) for (; this.buf[this.pos++] > 127;) ; else if (2 === e) this.pos = this.readVarint() + this.pos; else if (5 === e) this.pos += 4; else {
if (1 !== e) throw new Error(`Unimplemented type: ${e}`);
this.pos += 8
}
}
writeTag(t, e) {
this.writeVarint(t << 3 | e)
}
realloc(t) {
let e = this.length || 16;
for (; e < this.pos + t;) e *= 2;
if (e !== this.length) {
const t = new Uint8Array(e);
t.set(this.buf), this.buf = t, this.dataView = new DataView(t.buffer), this.length = e
}
}
finish() {
return this.length = this.pos, this.pos = 0, this.buf.subarray(0, this.length)
}
writeFixed32(t) {
this.realloc(4), this.dataView.setInt32(this.pos, t, !0), this.pos += 4
}
writeSFixed32(t) {
this.realloc(4), this.dataView.setInt32(this.pos, t, !0), this.pos += 4
}
writeFixed64(t) {
this.realloc(8), this.dataView.setInt32(this.pos, -1 & t, !0), this.dataView.setInt32(this.pos + 4, Math.floor(t * SHIFT_RIGHT_32), !0), this.pos += 8
}
writeSFixed64(t) {
this.realloc(8), this.dataView.setInt32(this.pos, -1 & t, !0), this.dataView.setInt32(this.pos + 4, Math.floor(t * SHIFT_RIGHT_32), !0), this.pos += 8
}
writeVarint(t) {
(t = +t || 0) > 268435455 || t < 0 ? writeBigVarint(t, this) : (this.realloc(4), this.buf[this.pos++] = 127 & t | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = 127 & (t >>>= 7) | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = 127 & (t >>>= 7) | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = t >>> 7 & 127))))
}
writeSVarint(t) {
this.writeVarint(t < 0 ? 2 * -t - 1 : 2 * t)
}
writeBoolean(t) {
this.writeVarint(+t)
}
writeString(t) {
t = String(t), this.realloc(4 * t.length), this.pos++;
const e = this.pos;
this.pos = writeUtf8(this.buf, t, this.pos);
const i = this.pos - e;
i >= 128 && makeRoomForExtraLength(e, i, this), this.pos = e - 1, this.writeVarint(i), this.pos += i
}
writeFloat(t) {
this.realloc(4), this.dataView.setFloat32(this.pos, t, !0), this.pos += 4
}
writeDouble(t) {
this.realloc(8), this.dataView.setFloat64(this.pos, t, !0), this.pos += 8
}
writeBytes(t) {
const e = t.length;
this.writeVarint(e), this.realloc(e);
for (let i = 0; i < e; i++) this.buf[this.pos++] = t[i]
}
writeRawMessage(t, e) {
this.pos++;
const i = this.pos;
t(e, this);
const s = this.pos - i;
s >= 128 && makeRoomForExtraLength(i, s, this), this.pos = i - 1, this.writeVarint(s), this.pos += s
}
writeMessage(t, e, i) {
this.writeTag(t, 2), this.writeRawMessage(e, i)
}
writePackedVarint(t, e) {
e.length && this.writeMessage(t, writePackedVarint, e)
}
writePackedSVarint(t, e) {
e.length && this.writeMessage(t, writePackedSVarint, e)
}
writePackedBoolean(t, e) {
e.length && this.writeMessage(t, writePackedBoolean, e)
}
writePackedFloat(t, e) {
e.length && this.writeMessage(t, writePackedFloat, e)
}
writePackedDouble(t, e) {
e.length && this.writeMessage(t, writePackedDouble, e)
}
writePackedFixed32(t, e) {
e.length && this.writeMessage(t, writePackedFixed32, e)
}
writePackedSFixed32(t, e) {
e.length && this.writeMessage(t, writePackedSFixed32, e)
}
writePackedFixed64(t, e) {
e.length && this.writeMessage(t, writePackedFixed64, e)
}
writePackedSFixed64(t, e) {
e.length && this.writeMessage(t, writePackedSFixed64, e)
}
writeBytesField(t, e) {
this.writeTag(t, 2), this.writeBytes(e)
}
writeFixed32Field(t, e) {
this.writeTag(t, 5), this.writeFixed32(e)
}
writeSFixed32Field(t, e) {
this.writeTag(t, 5), this.writeSFixed32(e)
}
writeFixed64Field(t, e) {
this.writeTag(t, 1), this.writeFixed64(e)
}
writeSFixed64Field(t, e) {
this.writeTag(t, 1), this.writeSFixed64(e)
}
writeVarintField(t, e) {
this.writeTag(t, 0), this.writeVarint(e)
}
writeSVarintField(t, e) {
this.writeTag(t, 0), this.writeSVarint(e)
}
writeStringField(t, e) {
this.writeTag(t, 2), this.writeString(e)
}
writeFloatField(t, e) {
this.writeTag(t, 5), this.writeFloat(e)
}
writeDoubleField(t, e) {
this.writeTag(t, 1), this.writeDouble(e)
}
writeBooleanField(t, e) {
this.writeVarintField(t, +e)
}
}
// exports.Pbf = Pbf
function readVarintRemainder(t, e, i) {
const s = i.buf;
let r, a;
if (a = s[i.pos++], r = (112 & a) >> 4, a < 128) return toNum(t, r, e);
if (a = s[i.pos++], r |= (127 & a) << 3, a < 128) return toNum(t, r, e);
if (a = s[i.pos++], r |= (127 & a) << 10, a < 128) return toNum(t, r, e);
if (a = s[i.pos++], r |= (127 & a) << 17, a < 128) return toNum(t, r, e);
if (a = s[i.pos++], r |= (127 & a) << 24, a < 128) return toNum(t, r, e);
if (a = s[i.pos++], r |= (1 & a) << 31, a < 128) return toNum(t, r, e);
throw new Error("Expected varint not more than 10 bytes")
}
function toNum(t, e, i) {
return i ? 4294967296 * e + (t >>> 0) : 4294967296 * (e >>> 0) + (t >>> 0)
}
function writeBigVarint(t, e) {
let i, s;
if (t >= 0 ? (i = t % 4294967296 | 0, s = t / 4294967296 | 0) : (i = ~(-t % 4294967296), s = ~(-t / 4294967296), 4294967295 ^ i ? i = i + 1 | 0 : (i = 0, s = s + 1 | 0)), t >= 0x10000000000000000 || t < -0x10000000000000000) throw new Error("Given varint doesn't fit into 10 bytes");
e.realloc(10), writeBigVarintLow(i, s, e), writeBigVarintHigh(s, e)
}
function writeBigVarintLow(t, e, i) {
i.buf[i.pos++] = 127 & t | 128, t >>>= 7, i.buf[i.pos++] = 127 & t | 128, t >>>= 7, i.buf[i.pos++] = 127 & t | 128, t >>>= 7, i.buf[i.pos++] = 127 & t | 128, t >>>= 7, i.buf[i.pos] = 127 & t
}
function writeBigVarintHigh(t, e) {
const i = (7 & t) << 4;
e.buf[e.pos++] |= i | ((t >>>= 3) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), t && (e.buf[e.pos++] = 127 & t)))))
}
function makeRoomForExtraLength(t, e, i) {
const s = e <= 16383 ? 1 : e <= 2097151 ? 2 : e <= 268435455 ? 3 : Math.floor(Math.log(e) / (7 * Math.LN2));
i.realloc(s);
for (let e = i.pos - 1; e >= t; e--) i.buf[e + s] = i.buf[e]
}
function writePackedVarint(t, e) {
for (let i = 0; i < t.length; i++) e.writeVarint(t[i])
}
function writePackedSVarint(t, e) {
for (let i = 0; i < t.length; i++) e.writeSVarint(t[i])
}
function writePackedFloat(t, e) {
for (let i = 0; i < t.length; i++) e.writeFloat(t[i])
}
function writePackedDouble(t, e) {
for (let i = 0; i < t.length; i++) e.writeDouble(t[i])
}
function writePackedBoolean(t, e) {
for (let i = 0; i < t.length; i++) e.writeBoolean(t[i])
}
function writePackedFixed32(t, e) {
for (let i = 0; i < t.length; i++) e.writeFixed32(t[i])
}
function writePackedSFixed32(t, e) {
for (let i = 0; i < t.length; i++) e.writeSFixed32(t[i])
}
function writePackedFixed64(t, e) {
for (let i = 0; i < t.length; i++) e.writeFixed64(t[i])
}
function writePackedSFixed64(t, e) {
for (let i = 0; i < t.length; i++) e.writeSFixed64(t[i])
}
function readUtf8(t, e, i) {
let s = "", r = e;
for (; r < i;) {
const e = t[r];
let a, o, h, n = null, d = e > 239 ? 4 : e > 223 ? 3 : e > 191 ? 2 : 1;
if (r + d > i) break;
1 === d ? e < 128 && (n = e) : 2 === d ? (a = t[r + 1], 128 == (192 & a) && (n = (31 & e) << 6 | 63 & a, n <= 127 && (n = null))) : 3 === d ? (a = t[r + 1], o = t[r + 2], 128 == (192 & a) && 128 == (192 & o) && (n = (15 & e) << 12 | (63 & a) << 6 | 63 & o, (n <= 2047 || n >= 55296 && n <= 57343) && (n = null))) : 4 === d && (a = t[r + 1], o = t[r + 2], h = t[r + 3], 128 == (192 & a) && 128 == (192 & o) && 128 == (192 & h) && (n = (15 & e) << 18 | (63 & a) << 12 | (63 & o) << 6 | 63 & h, (n <= 65535 || n >= 1114112) && (n = null))), null === n ? (n = 65533, d = 1) : n > 65535 && (n -= 65536, s += String.fromCharCode(n >>> 10 & 1023 | 55296), n = 56320 | 1023 & n), s += String.fromCharCode(n), r += d
}
return s
}
function writeUtf8(t, e, i) {
for (let s, r, a = 0; a < e.length; a++) {
if (s = e.charCodeAt(a), s > 55295 && s < 57344) {
if (!r) {
s > 56319 || a + 1 === e.length ? (t[i++] = 239, t[i++] = 191, t[i++] = 189) : r = s;
continue
}
if (s < 56320) {
t[i++] = 239, t[i++] = 191, t[i++] = 189, r = s;
continue
}
s = r - 55296 << 10 | s - 56320 | 65536, r = null
} else r && (t[i++] = 239, t[i++] = 191, t[i++] = 189, r = null);
s < 128 ? t[i++] = s : (s < 2048 ? t[i++] = s >> 6 | 192 : (s < 65536 ? t[i++] = s >> 12 | 224 : (t[i++] = s >> 18 | 240, t[i++] = s >> 12 & 63 | 128), t[i++] = s >> 6 & 63 | 128), t[i++] = 63 & s | 128)
}
return i
}
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype = {
clone: function () {
return new Point(this.x, this.y);
},
add: function (p) {
return this.clone()._add(p);
},
sub: function (p) {
return this.clone()._sub(p);
},
mult: function (k) {
return this.clone()._mult(k);
},
div: function (k) {
return this.clone()._div(k);
},
rotate: function (a) {
return this.clone()._rotate(a);
},
matMult: function (m) {
return this.clone()._matMult(m);
},
unit: function () {
return this.clone()._unit();
},
perp: function () {
return this.clone()._perp();
},
round: function () {
return this.clone()._round();
},
mag: function () {
return Math.sqrt(this.x * this.x + this.y * this.y);
},
equals: function (p) {
return this.x === p.x &&
this.y === p.y;
},
dist: function (p) {
return Math.sqrt(this.distSqr(p));
},
distSqr: function (p) {
var dx = p.x - this.x,
dy = p.y - this.y;
return dx * dx + dy * dy;
},
angle: function () {
return Math.atan2(this.y, this.x);
},
angleTo: function (b) {
return Math.atan2(this.y - b.y, this.x - b.x);
},
angleWith: function (b) {
return this.angleWithSep(b.x, b.y);
},
// Find the angle of the two vectors, solving the formula for the cross product a x b = |a||b|sin(θ) for θ.
angleWithSep: function (x, y) {
return Math.atan2(
this.x * y - this.y * x,
this.x * x + this.y * y);
},
_matMult: function (m) {
var x = m[0] * this.x + m[1] * this.y,
y = m[2] * this.x + m[3] * this.y;
this.x = x;
this.y = y;
return this;
},
_add: function (p) {
this.x += p.x;
this.y += p.y;
return this;
},
_sub: function (p) {
this.x -= p.x;
this.y -= p.y;
return this;
},
_mult: function (k) {
this.x *= k;
this.y *= k;
return this;
},
_div: function (k) {
this.x /= k;
this.y /= k;
return this;
},
_unit: function () {
this._div(this.mag());
return this;
},
_perp: function () {
var y = this.y;
this.y = this.x;
this.x = -y;
return this;
},
_rotate: function (angle) {
var cos = Math.cos(angle),
sin = Math.sin(angle),
x = cos * this.x - sin * this.y,
y = sin * this.x + cos * this.y;
this.x = x;
this.y = y;
return this;
},
_round: function () {
this.x = Math.round(this.x);
this.y = Math.round(this.y);
return this;
}
};
// constructs Point from an array if necessary
Point.convert = function (a) {
if (a instanceof Point) {
return a;
}
if (Array.isArray(a)) {
return new Point(a[0], a[1]);
}
return a;
};
//# sourceMappingURL=/sm/91dc2634fd08444face2220488dd1b2296e475fe4a0f0781089e74342af5c955.map
class TileFeature {
constructor(pbf, end, extent, keys, values) {
// Public
this.properties = {};
this.extent = extent;
this.type = 0;
// Private
this._pbf = pbf;
this._geometry = -1;
this._keys = keys;
this._values = values;
pbf.readFields(readFeature, this, end);
}
types() {
return ['Unknown', 'Point', 'LineString', 'Polygon'];
}
loadGeometry() {
var pbf = this._pbf;
pbf.pos = this._geometry;
var end = pbf.readVarint() + pbf.pos,
cmd = 1,
length = 0,
x = 0,
y = 0,
lines = [],
line;
while (pbf.pos < end) {
if (!length) {
var cmdLen = pbf.readVarint();
cmd = cmdLen & 0x7;
length = cmdLen >> 3;
}
length--;
if (cmd === 1 || cmd === 2) {
x += pbf.readSVarint();
y += pbf.readSVarint();
if (cmd === 1) { // moveTo
if (line) lines.push(line);
line = [];
}
line.push(new Point(x, y));
} else if (cmd === 7) {
if (line) {
line.push(line[0].clone()); // closePolygon
}
} else {
throw new Error('unknown command ' + cmd);
}
}
if (line) lines.push(line);
return lines;
}
bbox() {
var pbf = this._pbf;
pbf.pos = this._geometry;
var end = pbf.readVarint() + pbf.pos,
cmd = 1,
length = 0,
x = 0,
y = 0,
x1 = Infinity,
x2 = -Infinity,
y1 = Infinity,
y2 = -Infinity;
while (pbf.pos < end) {
if (!length) {
var cmdLen = pbf.readVarint();
cmd = cmdLen & 0x7;
length = cmdLen >> 3;
}
length--;
if (cmd === 1 || cmd === 2) {
x += pbf.readSVarint();
y += pbf.readSVarint();
if (x < x1) x1 = x;
if (x > x2) x2 = x;
if (y < y1) y1 = y;
if (y > y2) y2 = y;
} else if (cmd !== 7) {
throw new Error('unknown command ' + cmd);
}
}
return [x1, y1, x2, y2];
}
toGeoJSON(x = 0, y = 0, z = 1) {
var size = this.extent * Math.pow(2, z),
x0 = this.extent * x,
y0 = this.extent * y,
coords = this.loadGeometry(),
type = this.types()[this.type],
i, j;
function project(line) {
for (var j = 0; j < line.length; j++) {
var p = line[j]
let y2 = 180 - (p.y + y0) * 360 / size;
line[j] = [
(p.x + x0) * 360 / size - 180,
360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
];
}
}
switch (this.type) {
case 1:
var points = [];
for (i = 0; i < coords.length; i++) {
points[i] = coords[i][0];
}
coords = points;
project(coords);
break;
case 2:
for (i = 0; i < coords.length; i++) {
project(coords[i]);
}
break;
case 3:
coords = classifyRings(coords);
for (i = 0; i < coords.length; i++) {
for (j = 0; j < coords[i].length; j++) {
project(coords[i][j]);
}
}
break;
}
if (coords.length === 1) {
coords = coords[0];
} else {
type = 'Multi' + type;
}
var result = {
type: "Feature",
geometry: {
type: type,
coordinates: coords
},
properties: this.properties
};
if ('id' in this) {
result.id = this.id;
}
return result;
}
}
function readFeature(tag, feature, pbf) {
if (tag == 1) feature.id = pbf.readVarint();
else if (tag == 2) readTag(pbf, feature);
else if (tag == 3) feature.type = pbf.readVarint();
else if (tag == 4) feature._geometry = pbf.pos;
}
function classifyRings(rings) {
var len = rings.length;
if (len <= 1) return [rings];
var polygons = [],
polygon,
ccw;
for (var i = 0; i < len; i++) {
var area = signedArea(rings[i]);
if (area === 0) continue;
if (ccw === undefined) ccw = area < 0;
if (ccw === area < 0) {
if (polygon) polygons.push(polygon);
polygon = [rings[i]];
} else {
polygon.push(rings[i]);
}
}
if (polygon) polygons.push(polygon);
return polygons;
}
function signedArea(ring) {
var sum = 0;
for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
p1 = ring[i];
p2 = ring[j];
sum += (p2.x - p1.x) * (p1.y + p2.y);
}
return sum;
}
function readTag(pbf, feature) {
var end = pbf.readVarint() + pbf.pos;
while (pbf.pos < end) {
var key = feature._keys[pbf.readVarint()],
value = feature._values[pbf.readVarint()];
feature.properties[key] = value;
}
}
class TileLayer {
constructor(pbf, end) {
// Public
this.version = 1;
this.name = null;
this.extent = 4096;
this.length = 0;
// Private
this._pbf = pbf;
this._keys = [];
this._values = [];
this._features = [];
pbf.readFields(readLayer, this, end);
this.length = this._features.length;
}
feature(i) {
if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
this._pbf.pos = this._features[i];
var end = this._pbf.readVarint() + this._pbf.pos;
return new TileFeature(this._pbf, end, this.extent, this._keys, this._values);
}
}
function readLayer(tag, layer, pbf) {
if (tag === 15) layer.version = pbf.readVarint();
else if (tag === 1) layer.name = pbf.readString();
else if (tag === 5) layer.extent = pbf.readVarint();
else if (tag === 2) layer._features.push(pbf.pos);
else if (tag === 3) layer._keys.push(pbf.readString());
else if (tag === 4) layer._values.push(readValueMessage(pbf));
}
function readValueMessage(pbf) {
var value = null,
end = pbf.readVarint() + pbf.pos;
while (pbf.pos < end) {
var tag = pbf.readVarint() >> 3;
value = tag === 1 ? pbf.readString() :
tag === 2 ? pbf.readFloat() :
tag === 3 ? pbf.readDouble() :
tag === 4 ? pbf.readVarint64() :
tag === 5 ? pbf.readVarint() :
tag === 6 ? pbf.readSVarint() :
tag === 7 ? pbf.readBoolean() : null;
}
return value;
}
class VectorTile {
constructor(pbf_tile) {
this.pbf_tile = pbf_tile
this.layers = {}
}
features() {
let jsonArray = []
for (let layersKey in this.layers) {
for (let i = 0; i < tile.layers[layersKey]._features.length; i++) {
let json = this.layers[layersKey].feature(i).toGeoJSON()
jsonArray.push(json)
}
}
return jsonArray
}
async on() {
let res = await fetch(this.pbf_tile)
let buf = await res.arrayBuffer()
buf = new Uint8Array(buf)
let pbf = new Pbf(buf)
this.layers = pbf.readFields(this.readTile, {})
}
readTile(tag, layers, pbf) {
if (tag === 3) {
var layer = new TileLayer(pbf, pbf.readVarint() + pbf.pos);
if (layer.length) layers[layer.name] = layer;
}
}
}