MapboxGL Javascript API:显示地图上所有标记的弹出窗口,这些标记不适用于多个图层

MapboxGL Javascript API:显示地图上所有标记的弹出窗口,这些标记不适用于多个图层,javascript,mapbox,mapbox-gl,mapbox-gl-js,Javascript,Mapbox,Mapbox Gl,Mapbox Gl Js,我的地图上有多个图层,每个图层对应一个特定的符号(一个地图盒图标),并包含带有该符号的所有标记。我希望每个标记都可以通过自己的弹出窗口单击。但是,只有添加的最后一层允许用户单击这些标记并查看弹出窗口,而之前的层被覆盖,因此这些层中的标记不可单击 "filter": ["==", "marker-symbol", symbol] 这里是JS提琴(大部分代码来自网站上的两个示例,我正在尝试将它们结合在一起) 我需要这行代码通过切换列表来过滤标记,并且我需要每个标记都可以单击 "filter":

我的地图上有多个图层,每个图层对应一个特定的符号(一个地图盒图标),并包含带有该符号的所有标记。我希望每个标记都可以通过自己的弹出窗口单击。但是,只有添加的最后一层允许用户单击这些标记并查看弹出窗口,而之前的层被覆盖,因此这些层中的标记不可单击

"filter": ["==", "marker-symbol", symbol]
这里是JS提琴(大部分代码来自网站上的两个示例,我正在尝试将它们结合在一起)

我需要这行代码通过切换列表来过滤标记,并且我需要每个标记都可以单击

"filter": ["==", "marker-symbol", symbol]
我该如何让所有标记都可以访问(以便单击它们并显示弹出窗口),而不仅仅是添加到最后一层中的标记


另外,如果每个标记都有自己的图层,您将如何在相应的标记旁边显示每个标记的名称?

问题在于您从未存储图层ID。每次添加层时,您都会用最新的id覆盖
layerID
。因此,当您创建onclick&mousemove侦听器时,您只是将这些侦听器添加到最新的层:
{layers:[layerID]}

我已经编辑了您的jsfiddle(),以便在每次添加层时将每个层id推入一个数组:
{layers:layerIdCollection}


如果您有任何问题,请告诉我:)

问题是您从未存储图层ID。每次添加层时,您都会用最新的id覆盖
layerID
。因此,当您创建onclick&mousemove侦听器时,您只是将这些侦听器添加到最新的层:
{layers:[layerID]}

我已经编辑了您的jsfiddle(),以便在每次添加层时将每个层id推入一个数组:
{layers:layerIdCollection}


如果您有任何问题,请告诉我:)

我如何向现有图层添加新标记?如果我使用相同的layerID,它将覆盖整个图层,并使图层中的所有其他标记从地图中消失。但是,如果我使用不同的id,该标记将显示在地图上,但它不会包含在该层中,因此切换功能无法在该标记上工作。由于map.setLayoutProperty()只接受字符串而不接受数组,因此有没有关于如何解决此问题的建议?mapbox似乎不是向现有图层添加点的好方法。我过去所做的只是在父源中添加另一层。我在单个源上有1k+层,没有遇到任何性能问题。您还必须将onclick侦听器添加到地图初始化后添加的层中。我明白了,您能够将想要的层组合在一起吗?例如,对于JS FIDLE中的切换功能,Mapbox GL是否允许您将新标记的图层与现有图层组合,以便切换不仅显示/隐藏现有图层中的标记,还显示/隐藏新标记?或者还有其他方法可以让这一切顺利进行吗?我不相信他们提供了一种可以让你合并图层的方法。我只需在每个要操作的层上使用
setLayoutProperty(层、名称、值)
,只需迭代存储在数组中的每个层id,并在每个层上执行
setLayoutProperty
。如何向现有层添加新标记?如果我使用相同的layerID,它将覆盖整个图层,并使图层中的所有其他标记从地图中消失。但是,如果我使用不同的id,该标记将显示在地图上,但它不会包含在该层中,因此切换功能无法在该标记上工作。由于map.setLayoutProperty()只接受字符串而不接受数组,因此有没有关于如何解决此问题的建议?mapbox似乎不是向现有图层添加点的好方法。我过去所做的只是在父源中添加另一层。我在单个源上有1k+层,没有遇到任何性能问题。您还必须将onclick侦听器添加到地图初始化后添加的层中。我明白了,您能够将想要的层组合在一起吗?例如,对于JS FIDLE中的切换功能,Mapbox GL是否允许您将新标记的图层与现有图层组合,以便切换不仅显示/隐藏现有图层中的标记,还显示/隐藏新标记?或者还有其他方法可以让这一切顺利进行吗?我不相信他们提供了一种可以让你合并图层的方法。我只需在每个要操作的层上使用
setLayoutProperty(层、名称、值)
,只需迭代存储在数组中的每个层id,并对每个层执行
setLayoutProperty