mapbox-gl-jsで地図を作成し、クリックすると道案内のポップアップを開く駐車場のレイヤーを追加しました。次に、駐車場のレイヤーの上にクリック可能なマーカー(バス停、アクセス可能な駐車場など)を配置しました。駐車場のマーカーをクリックすると、駐車場のポップアップとマーカーのポップアップがポップアップ表示されます。マーカーポップアップがある場合、ポリゴンレイヤーがポップアップを起動しないようにするにはどうすればよいですか?両方のポップアップが表示されないようにします。ここでMapbox GLのクリック可能なポリゴンの上にクリック可能なマーカーを配置する方法JS
は、関連するコードです:
// Add a layer showing the parking lots
map.addLayer({
"id": "parking-layer",
"type": "fill",
"source": "parking-buttons",
"layout": {},
"paint": {
"fill-color": "hsla(0, 0%, 0%, 0)",
"fill-outline-color": "hsla(0, 0%, 0%, 0)"
}
});
// Add a layer showing the bus stop
map.addLayer({
"id": "bus",
"type": "symbol",
"source": "bus",
"layout": {
"icon-image": "{icon}-11",
"icon-allow-overlap": true
},
"paint": {
"icon-opacity": {"stops": [[15.49, 0], [15.5, 1]]}
}
});
// When a click event occurs for a polygon, open a popup with details
map.on('click', function (e) {
var features = map.queryRenderedFeatures(e.point, { layers: ['parking-layer', 'buildings-layer'] });
if (!features.length) {
return;
}
var feature = features[0];
// Populate the popup and set its coordinates
var popup = new mapboxgl.Popup()
.setLngLat(map.unproject(e.point))
.setHTML(feature.properties.description)
.addTo(map);
});
// When a click event occurs for a node, open a popup with details
map.on('click', function (e) {
var features = map.queryRenderedFeatures(e.point, { layers: ['bus', 'ephone'] });
if (!features.length) {
return;
}
var feature = features[0];
// Populate the popup and set its coordinates
var popup = new mapboxgl.Popup()
.setLngLat(feature.geometry.coordinates)
.setHTML(feature.properties.description)
.addTo(map);
});
私はこのライブラリについてはあまり知らないが、あなたは2 'click'のハンドラを登録しているように見えましたどちらも個別に実行されます。したがって、あなたは両方のポップアップを見ている。私は単一のハンドラでのみクリックイベントを処理し、返された機能に応じてポップアップを表示するロジックを実装することをお勧めします。 – forrert