メインコンテンツまでスキップ

Highlight buildings in the Mapbox Standard Style

This example demonstrates how to highlight individual buildings in the Mapbox Standard Style using the addInteraction method with the built-in buildings featureset.

The code below demonstrates how to:

  • Highlight a building on hover using the highlight feature state and a pointer cursor to show it is selectable
  • Persistently select a building on click using the select feature state, clearing any previous selection
  • Customize the hover and selection colors using the colorBuildingHighlight and colorBuildingSelect configuration properties
  • Disable 3D landmarks using the show3dLandmarks configuration property, as this highlighting technique does not work for buildings represented as 3D models
Mapbox Standard Style only

The buildings featureset and colorBuildingHighlight/colorBuildingSelect configuration properties are only available in styles that import the Mapbox Standard Style.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Highlight buildings in the Mapbox Standard Style</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<link href="https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js"></script>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<div id="map"></div>

<script>
// TO MAKE THE MAP APPEAR YOU MUST
// ADD YOUR ACCESS TOKEN FROM
// https://account.mapbox.com
mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/standard',
center: [-74.0066, 40.7135],
zoom: 15.5,
pitch: 45,
bearing: -17.6,
config: {
// Customize the highlight and select colors for the buildings featureset.
// colorBuildingHighlight controls the hover color (default: blue).
// colorBuildingSelect controls the click/selection color (default: blue).
// show3dLandmarks is set to false, as this highlighting technique does not work for buildings represented as 3D models.
basemap: {
colorBuildingHighlight: '#93C5FD',
colorBuildingSelect: '#1E40AF',
show3dLandmarks: false
}
}
});

let hoveredBuilding = null;
let selectedBuilding = null;

// Show a pointer cursor and highlight the building on hover
map.addInteraction('building-mouseenter', {
type: 'mouseenter',
target: { featuresetId: 'buildings', importId: 'basemap' },
handler: ({ feature }) => {
if (hoveredBuilding) {
map.setFeatureState(hoveredBuilding, { highlight: false });
}
hoveredBuilding = feature;
map.setFeatureState(feature, { highlight: true });
map.getCanvas().style.cursor = 'pointer';
}
});

// Remove the highlight and reset the cursor when the mouse leaves a building.
// Only clear if the leaving feature matches the currently hovered building —
// this prevents stale mouseleave events (which fire per-feature due to
// return false) from clearing a highlight set by a later mouseenter.
map.addInteraction('building-mouseleave', {
type: 'mouseleave',
target: { featuresetId: 'buildings', importId: 'basemap' },
handler: ({ feature }) => {
if (hoveredBuilding && feature.id === hoveredBuilding.id) {
map.setFeatureState(hoveredBuilding, { highlight: false });
hoveredBuilding = null;
map.getCanvas().style.cursor = '';
}
return false;
}
});

// Persistently select a building on click, clearing any previous selection
map.addInteraction('building-click', {
type: 'click',
target: { featuresetId: 'buildings', importId: 'basemap' },
handler: ({ feature }) => {
if (selectedBuilding) {
map.setFeatureState(selectedBuilding, { select: false });
}
selectedBuilding = feature;
map.setFeatureState(feature, { select: true });
}
});
</script>

</body>
</html>
このコードスニペットは、YOUR_MAPBOX_ACCESS_TOKENあなたのMapboxアカウントのアクセストークンに置き換えるまで、期待通りに動作しません。
このexampleは役に立ちましたか?