Basemap
Geometry with no series still renders, with labels, hover and tooltips:
const map = new ApexMaps(document.querySelector('#map'), {
geo: { map: 'world/countries@110m' },
})
await map.render()
No empty-state branch
There is no separate "empty state" path anywhere in the drawing code: when no choropleth, bubble or marker series is configured, the map draws a basemap pseudo-series instead. Hit testing, labeling and accessibility all run the same way they do with real data, because they're the same code path, not a fallback bolted on beside it.
The same basemap also renders underneath point-only series. Bubbles or markers floating in the void with no coastline under them isn't a map, so bubble, marker, arc and line series that carry no geometry of their own still get one drawn beneath them automatically.
Geometry with no data
A basemap-only map is useful on its own, not just as a fallback: a reference map, a locator inset, or the base a story annotates without any values behind it. It's the same geo configuration as any other map, so projection, view fitting, and the sphere and graticule work identically:
geo: {
map: 'world/countries@110m',
sphere: { show: true },
graticule: { show: true, step: 20 },
}
Label collision handling
dataLabels.enabled turns on feature labels, and collision handling is what keeps a world map from drowning in overlapping text:
dataLabels: {
enabled: true,
collision: 'hide', // drop labels that would overlap
minFeatureArea: 900, // skip labels for shapes too small to carry one
}
Labels are laid out in screen space every frame and dropped when they'd overlap, largest feature and largest value first, so the labels that survive a crowded view are the informative ones rather than whichever happened to be laid out first. minFeatureArea skips labels for features below that many square pixels of projected area before any per-label collision work runs at all, which is also why a pack with thousands of tiny features doesn't pay for measuring most of them. Zoom in and more labels appear as the projected areas grow and the collisions resolve on their own.