向矢量切片图层功能添加新的属性值

问题描述 投票:0回答:0

我正在使用 @mapbox/vector-tile 从 .mbtiles 文件中读取 VectorTiles。现在,对于图块图层的功能,我需要添加一个新的属性值。例如,目前我的属性中有 id:123,name:“abc”,我想添加 age:“33”。 我能够读取属性,但无法添加新属性。 这是我的代码:

const express = require("express");
const path = require("path");
const vtpbf = require('vt-pbf')
const MBTiles = require('@mapbox/mbtiles');
const { VectorTile } = require('@mapbox/vector-tile');
const Pbf = require('pbf');

const app = new express();

app.get('/tiles/:z/:x/:y.vector.pbf', async (req, res) => {
    let { z, x, y } = req.params;

    new MBTiles(path.join(__dirname, `shapes_uf.mbtiles`) + "?mode=ro", function(err, mbtiles) {
        mbtiles.getInfo(function(err, info) {
          const layerName = info.vector_layers[0].id;
            if (err) {
          return res.status(400).send(`Make sure ${path.basename(fileName)} is valid MBTiles.`)
        }

            mbtiles.getTile(z, x, y, function (err, data, headers) {

                if (err) {
                    return res.status(404).send(err.message)
                } else {
                    const tile = new VectorTile(new Pbf(data))

                    const featureLength = tile.layers[layerName].length;

                    for (let x = 0; x < featureLength; x += 1) {
                        console.log("current properties: ", tile.layers[layerName].feature(x).properties)
                        tile.layers[layerName].feature(x).properties["age"] = "33";
                        // nothing changed here!
                    }

                  res
                    .setHeader(
                      'Content-Type',
                      'application/x-protobuf'
                    )
                    .status(200).send(data)
                    }
            });
        });
    })
})

const port = process.env.PORT || 3000;

app.listen(port, () => {
    console.log("Server listening on ", port);
});

谢谢!

node.js protocol-buffers mapbox mbtiles vector-tiles
© www.soinside.com 2019 - 2024. All rights reserved.