1 | #!/usr/bin/env node
|
2 | var assert = require('assert');
|
3 | var Protobuf = require('pbf');
|
4 | var vt = require('vector-tile'),
|
5 | VectorTile = vt.VectorTile,
|
6 | VectorTileFeature = vt.VectorTileFeature;
|
7 | var rbush = require('../js/lib/rbush.js');
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | var fs = require("fs");
|
13 | var zlib = require("zlib");
|
14 |
|
15 | if (process.argv.length < 3) {
|
16 | console.warn('Usage: %s %s [file.vector.pbf]', process.argv[0], process.argv[1]);
|
17 | process.exit(1);
|
18 | }
|
19 |
|
20 | var data = fs.readFileSync(process.argv[2]);
|
21 |
|
22 | zlib.inflate(data, function(err, data) {
|
23 | if (err) throw err;
|
24 |
|
25 | var tile = new VectorTile(new Protobuf(new Uint8Array(data)));
|
26 |
|
27 |
|
28 | var tree = rbush(9, ['.x1', '.y1', '.x2', '.y2']);
|
29 |
|
30 | for (var layer_name in tile.layers) {
|
31 | var layer = tile.layers[layer_name];
|
32 | for (var i = 0; i < layer.length; i++) {
|
33 | var feature = layer.feature(i);
|
34 |
|
35 | var bbox = feature.bbox();
|
36 | bbox.index = i;
|
37 | bbox.layer = layer_name;
|
38 | tree.insert(bbox);
|
39 |
|
40 | assert(bbox.x1 <= bbox.x2);
|
41 | assert(bbox.y1 <= bbox.y2);
|
42 | }
|
43 | }
|
44 |
|
45 | var radius = 16;
|
46 | var x = 126 * 16;
|
47 | var y = 72 * 16;
|
48 | var result = tree.search([ x - radius, y - radius, x + radius, y + radius ]);
|
49 |
|
50 | for (var i = 0; i < result.length; i++) {
|
51 | var layer = tile.layers[result[i].layer];
|
52 | var feature = layer.feature(result[i].index);
|
53 |
|
54 | console.warn(result[i].layer, feature._type, feature['class'], feature.contains({ x: x, y: y }, radius));
|
55 | }
|
56 |
|
57 |
|
58 |
|
59 | });
|