隐藏特定区域内的多边形



我正在尝试创建一种体验,在这种体验中,我在地图上有两个详细的建筑3D模型,通过矢量瓦片源挤出相邻建筑的建筑足迹。3D模型将是主要焦点,挤出的足迹将供参考。我遇到的一个挑战是,我有一个全球建筑足迹层,它有一个3D建筑的足迹,但它并不完美匹配。此外,当拉伸时,它最终会合并/重叠漂亮的三维模型。

我希望能够隐藏与3D模型重叠的单个脚印。我最初的想法是获取3D模型的边界框,然后使用新的within样式表达式,但看起来这只会过滤点和线,而不会过滤多边形。建筑足迹多边形中没有我可以用来过滤的唯一信息。

我知道我可以监控地图的移动,查询渲染的特征,并手动检测相交的多边形,但由于足迹上没有唯一的属性,我无法过滤或使用特征状态。

关于如何有效地避免渲染来自矢量平铺源的特定区域中的单个多边形,有什么想法吗?

Mapbox Streets中的建筑层不包含任何唯一的属性以允许不同的过滤或渲染,这是一个常见的问题。

最好的解决方案通常是获取不同的建筑层,在这种情况下,在预处理中删除那些多余的建筑。

我能想到一个相当疯狂的变通方法,它可能在这里工作,尽管性能可能很差。

  1. 添加不透明度非常低的建筑层,类型为fill, essentially invisible. (Maybe invisible would work.) Call your main source建筑`
  2. 创建类型为geojson的次建筑源和次fill-extrusion层。将此源称为buildings-copy
  3. 在地图movemoveend上,使用querySourceFeatures获取所有建筑的副本
  4. 使用Turf处理此副本以删除不需要的建筑,并调用setData将副本设置为buildings-copy的数据

您可能需要进行一些巧妙的缓存以获得合理的性能。

最新更新