如何在传单中显示由 geojson-vt 生成的矢量图块?
How to display vector tiles generated by geojson-vt in leaflet?
我有很多 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 地图中?
是否有任何推荐的插件或库可以提供帮助?
Geojson-vt 的 TileIndex.getTile()
returns JSON 版本的 Mapbox 矢量切片规范:
我不知道有任何图书馆可以显示这种格式。事实上,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 to Mapbox-gl-js being "powered by" geojson-vt, but no explicit instructions on how to make that work. Perhaps the better approach is to simply use mapbox-gl-js GeoJSONSource 中有各种参考资料。
在这个example, it is shown how to render geojson-vt in a leaflet map by using L.CanvasTiles.
问题是该示例中描述的 Sumbera 的 CanvasTiles 扩展仅适用于 leaflet 0.7。我还没有找到特别针对 CanvasTiles 的回购协议,更不用说它的 npm 包了。
这个 leaflet 插件真的帮了我大忙,这是一个很好的开始,它适用于 Leaflet 1.0 及更高版本。我目前在带有当前版本 Leaflet 的地图应用程序中使用它并且效果很好。
https://github.com/brandonxiang/leaflet-geojson-vt/tree/leaflet1.0.0
我有很多 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 地图中?
是否有任何推荐的插件或库可以提供帮助?
Geojson-vt 的 TileIndex.getTile()
returns JSON 版本的 Mapbox 矢量切片规范:
我不知道有任何图书馆可以显示这种格式。事实上,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 to Mapbox-gl-js being "powered by" geojson-vt, but no explicit instructions on how to make that work. Perhaps the better approach is to simply use mapbox-gl-js GeoJSONSource 中有各种参考资料。
在这个example, it is shown how to render geojson-vt in a leaflet map by using L.CanvasTiles.
问题是该示例中描述的 Sumbera 的 CanvasTiles 扩展仅适用于 leaflet 0.7。我还没有找到特别针对 CanvasTiles 的回购协议,更不用说它的 npm 包了。
这个 leaflet 插件真的帮了我大忙,这是一个很好的开始,它适用于 Leaflet 1.0 及更高版本。我目前在带有当前版本 Leaflet 的地图应用程序中使用它并且效果很好。 https://github.com/brandonxiang/leaflet-geojson-vt/tree/leaflet1.0.0