gpt4 book ai didi

javascript - 如何在传单中显示由 geojson-vt 生成的矢量图 block ?

转载 作者:可可西里 更新时间:2023-11-01 02:44:38 25 4
gpt4 key购买 nike

我有很多 GeoJSON 空间数据要显示在传单 map 上。大约 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 map 中?

是否有任何推荐的插件或库可以提供帮助?

最佳答案

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

enter image description here

我不知道有任何库可以显示这种格式。事实上,Mapbox's own demo在相当低的层次上实现可视化:

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();

您可以使用他们的一些代码来帮助您。

自述文件和 related blog post 中有各种引用资料到 Mapbox-gl-js 由 geojson-vt“提供支持”,但没有关于如何使其工作的明确说明。也许更好的方法是简单地使用 mapbox-gl-js GeoJSONSource .

关于javascript - 如何在传单中显示由 geojson-vt 生成的矢量图 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33547088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com