如何在leaflet中显示由geojson-vt生成的矢量切片?

12

我有很多GeoJSON空间数据,想在地图上展示。大约有35,000个GeoJSON对象。

由于点的数量可能非常大,因此我想使用 geojson-vt 库在客户端上对我的数据进行分块。

现在,我已经成功地使用geojson-vt库对我的数据进行了分块处理:

var geoJson = {}; // Request to get data via API call not shown here

var tileOptions = {
        maxZoom: 18, 
        tolerance: 5, 
        extent: 4096,
        buffer: 64, 
        debug: 0, 
        indexMaxZoom: 0, 
        indexMaxPoints: 100000, 
    };

var tileIndex = geojsonvt(geoJson, tileOptions);

我该如何将由geojson-vt生成的矢量瓦片数据集成到我的Leaflet地图中?

有没有推荐的插件或库可以帮助实现?

3个回答

4
Geojson-vt的TileIndex.getTile()返回Mapbox矢量瓦片规范的JSON版本:

enter image description here

我不知道有任何库可以显示这种格式。确实,Mapbox自己的演示在相当低的级别上实现了可视化:
var tile = tileIndex.getTile(z, x, y);

console.timeEnd('getting tile z' + z + '-' + x + '-' + y);

if (!tile) {
    console.log('tile empty');
    zoomOut();
    return;
}

// console.log('z%d-%d-%d: %d points of %d', z, x, y, tile.numSimplified, tile.numPoints);
// console.time('draw');

ctx.clearRect(0, 0, height, height);

var features = tile.features;

ctx.strokeStyle = 'red';
ctx.fillStyle = 'rgba(255,0,0,0.05)';

for (var i = 0; i < features.length; i++) {
    var feature = features[i],
        type = feature.type;

    ctx.beginPath();

    for (var j = 0; j < feature.geometry.length; j++) {
        var geom = feature.geometry[j];

        if (type === 1) {
            ctx.arc(geom[0] * ratio + pad, geom[1] * ratio + pad, 2, 0, 2 * Math.PI, false);
            continue;
        }

        for (var k = 0; k < geom.length; k++) {
            var p = geom[k];
            if (k) ctx.lineTo(p[0] * ratio + pad, p[1] * ratio + pad);
            else ctx.moveTo(p[0] * ratio + pad, p[1] * ratio + pad);
        }
    }

    if (type === 3 || type === 1) ctx.fill('evenodd');
    ctx.stroke();
}
drawGrid();

你可以使用他们的一些代码来帮助你。
在README和相关博客文章中有各种引用,指出Mapbox-gl-js是由geojson-vt提供动力,但没有明确的说明如何使其工作。也许更好的方法是简单地使用mapbox-gl-jsGeoJSONSource

2

1
在这个 示例 中,展示了如何使用 L.CanvasTiles 在 leaflet 地图中呈现 geojson-vt。
问题是,Sumbera 在那个示例中描述的 CanvasTiles 扩展仅适用于 leaflet 0.7。我还没有找到特定的 CanvasTiles 存储库,更不用说它的 npm 包了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接