2016-06-05 15 views
1

Ich habe mehrere Ebenen auf meiner Karte, die jeweils einem bestimmten Symbol (einem Mapbox-Symbol) entsprechen und alle Markierungen mit diesem Symbol enthalten. Ich möchte, dass jeder Marker mit einem eigenen Popup klickbar ist. Nur die letzte Ebene, die hinzugefügt wird, erlaubt dem Benutzer jedoch, auf diese Markierungen zu klicken und das Popup zu sehen, während die vorherigen Ebenen abgedeckt werden, sodass die Markierungen in diesen Ebenen nicht anklickbar sind.MapboxGL Javascript API: Popup für alle Marker auf der Karte anzeigen, die nicht auf mehreren Ebenen arbeiten

Hier ist die JS Fiddle (die meisten der Code ist von den beiden Beispielen auf der Website, und ich versuche, sie miteinander zu kombinieren)

https://jsfiddle.net/wy5rdwzz/

ich diese Codezeile müssen in der Lage sein, um die Marker durch Umschalten einer Liste zu filtern, und ich brauche jeden einzelnen Marker anklickbar.

"filter": ["==", "marker-symbol", symbol] 

Wie würde ich mich über alle machen den Marker zugänglich (so dass sie und ein Popup geklickt werden kann, wird angezeigt), nicht nur die, die in der letzten Schicht, die auf hinzugefügt wird?

Wie würden Sie auch den Namen jedes Markers neben dem entsprechenden Marker anzeigen, wenn jeder Marker eine eigene Ebene hat?

Antwort

4

Das Problem war, dass Sie Ihre Layer-IDs nie gespeichert haben. Jedes Mal, wenn Sie eine Ebene hinzugefügt haben, haben Sie layerID mit der neuesten ID überschrieben. Wenn Sie also Ihren onclick & mousemove-Listener erstellten, fügten Sie diese Listener nur dem neuesten Layer hinzu: { layers: [layerID] }.

Ich habe Ihre jsfiddle bearbeitet (here), um jede Schicht ID in ein Array jedes Mal, wenn eine Ebene hinzugefügt wird: { layers: layerIdCollection }.

Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben :)

+0

Awesome, thanks! – user3226932

+0

Wie kann ich einer vorhandenen Ebene eine neue Markierung hinzufügen? Wenn ich dieselbe LayerID verwende, wird die gesamte Ebene überschrieben und alle anderen Marker in der Ebene werden aus der Map entfernt. Wenn ich jedoch eine andere ID verwende, würde diese Markierung auf der Karte erscheinen, aber sie wird nicht in dieser Ebene enthalten sein, so dass die Umschaltfunktion bei dieser Markierung nicht funktioniert. Irgendwelche Vorschläge zur Lösung dieses Problems, da map.setLayoutProperty() nur eine Zeichenfolge und kein Array akzeptiert? – user3226932

+1

Es scheint nicht so zu sein, dass mapbox eine gute Möglichkeit bietet, Punkte zu einer bestehenden Ebene hinzuzufügen. Was ich in der Vergangenheit getan habe, ist einfach einen weiteren Layer zur übergeordneten Quelle hinzuzufügen. Ich hatte 1k + Schichten auf einer einzigen Quelle und hatte keine Leistungsprobleme. Sie müssen auch den onclick-Listener zu den Layern hinzufügen, die nach der Initialisierung der Karte hinzugefügt wurden. –