PointLabelLayer
by felixp
HTML
<!DOCTYPE html>
<html>
<head>
<title>Labels</title>
<!-- Maplibre & deck.gl imports -->
<script src="https://unpkg.com/[email protected]/dist/maplibre-gl.js"></script>
<link href="https://unpkg.com/[email protected]/dist/maplibre-gl.css" rel="stylesheet" />
<script src="https://unpkg.com/[email protected]/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/[email protected]/dist.min.js"></script>
</head>
<body>
<div id="map"></div>
</body>
</html>
CSS
body {
margin: 0;
padding: 0;
}
#map{
width: 100vw;
height: 100vh;
}
JavaScript
const AIRPORTS = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/line/airports.json'
const collisionFilterExtension = new deck.CollisionFilterExtension();
const deckgl = new deck.DeckGL({
// Basemap style
container: 'map',
// Can also use 'positron', 'dark-matter' instead of voyager
mapStyle: "https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",
// Initial map location
initialViewState: {latitude: 50, longitude: 10, zoom: 3},
controller: true,
// Visualization overlay
layers: [
new deck.ScatterplotLayer({
data: AIRPORTS,
getPosition: item => item.coordinates,
radiusMinPixels: 2
}),
new deck.carto._PointLabelLayer({
data: AIRPORTS,
extensions: [collisionFilterExtension],
getPosition: d => d.coordinates,
getText: d => d.name,
getSecondaryText: d => d.abbrev,
getColor: d => [2, 5, 11],
sizeScale: 13,
getSecondaryColor: d => [102, 105, 111],
secondarySizeScale: 10,
getTextAnchor: 'start',
outlineColor: [255, 255, 255],
fontSettings: {sdf: true},
outlineWidth: 2
}),
]
});