【问题标题】:Efficiant loading via filter with Mapbox通过使用 Mapbox 的过滤器进行高效加载
【发布时间】:2020-05-05 16:45:33
【问题描述】:

我有几个 mapbox 数据集,每个数据集都有一组位于不同城市的特征。每个要素都有一个名为 city 的字段,其中包含要素所在的城市(例如 city = "new york")。在 mapbox studio 中,我有一种样式,其中包含由每个数据集组成的图层。我想加载一个地图,它的边界框包含city == "new york" 的所有功能(使地图视图适合功能 bbox)。我怎样才能做到这一点,最好不加载不满足city=="new york"的功能@

【问题讨论】:

    标签: mapbox mapbox-gl-js mapbox-gl


    【解决方案1】:

    如果我理解正确,您有一张包含所有城市的底图,但是当您在 mapbox-gl-js 中加载地图时,您希望将它们过滤到一个特定的城市。

    你可以通过调用来做到这一点:

    map.setFilter('my-cities-layer', ['==', ['get', 'city'], 'new york']);

    不过,实际上并没有一种简单的方法可以过滤所有层以仅包含带有该标签的数据。

    【讨论】:

    • 谢谢史蒂夫!一般来说,值得注意的是,此处概述的基于 GL JS 表达式的解决方案本质上等同于先前答案中概述的基于 Studio 的解决方案,但决定是在 Studio 中应用过滤器还是在客户端使用 GL JS将取决于您的实施的具体情况。如果您确实想在运行时直观地过滤城市数据,基于表达式的过滤是一个不错的选择(我们文档中的这个示例显示了一个与您正在寻找的非常相似的用例:docs.mapbox.com/mapbox-gl-js/example/filter-markers-by-input)。
    • 对不起,我假设作为一个编程站点,正在询问编程答案。非编程问题对于 SO 来说是题外话(尽管我认为非编程 答案 可能没问题)。
    • 哇,感谢 Steve 和 Mapbox 的支持!有了您的解决方案和适合边界的要求,这是我目前使用的解决方案:gist.github.com/guy-kdm/a6e93c190b267582f1d859e08ef0df5f 我认为这并不理想,我希望地图首先呈现的边界正确,而不是“加载”当它已经渲染时,并且由于某种原因未键入 geometry.coordinates 属性。
    • 啊,没有说明这个要求。也许会开始一个新问题“我如何在地图加载之前操纵样式”。
    • 谢谢@SteveBennett,这就是我所说的“......它的边界框包含所有带有city ==“new york”的特征......在问题文本中。我将编辑措辞使其更清晰。这种符合界限的行为是否可以实现?再次感谢负载,花了很多时间!
    【解决方案2】:

    在 Mapbox Studio 中选择相关图层后,选择要控制其可见性的属性。例如,假设您有兴趣为数据集中的每个特征显示一个文本字段(同样的逻辑也可以应用于图标图像)。选择图层的此属性后,单击图层编辑器中的“带有数据条件的样式”选项。然后系统将提示您选择一个数据字段(在您的情况下为 city),随后提示您为此数据字段设置值(在您的情况下为 new york)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多