Overlay Components

Overlay components display HTML content positioned on the map at specific coordinates. Currently implemented components include tooltips and tooltip managers.

Overlay.Tooltip

Displays tooltips anchored to map coordinates with HTML content.

Basic Usage

<script>
	import { Map, Layer, Feature, Overlay } from 'svelte-openlayers';

	let showTooltip = false;
	let tooltipPosition = [0, 0];
	let tooltipContent = '';

	const handleFeatureHover = (feature, coordinate) => {
		tooltipContent = feature.get('name');
		tooltipPosition = coordinate || [0, 0];
		showTooltip = true;
	};

	const hideTooltip = () => {
		showTooltip = false;
	};
</script>

<Map.Root>
	<Map.View center={[0, 0]} zoom={2} />
	<Layer.Tile source="osm" />
	<Layer.Vector>
		<Feature.Point coordinates={[-74.0, 40.7]} properties={{ name: 'New York' }} />
	</Layer.Vector>

	<Interaction.Hover onHover={handleFeatureHover} onHoverEnd={hideTooltip} />

	{#if showTooltip}
		<Overlay.Tooltip position={tooltipPosition}>
			{tooltipContent}
		</Overlay.Tooltip>
	{/if}
</Map.Root>

Props

PropTypeDefaultDescription
position[number, number][0, 0]Tooltip anchor coordinates
contentstringundefinedTooltip text content
visiblebooleantrueTooltip visibility
offset[number, number][0, 0]Offset in pixels
positioning'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right''bottom-center'Tooltip positioning relative to anchor
classstringundefinedCSS class for tooltip container
autoPanbooleanfalseAuto-pan map to show tooltip
overlayOverlay | nullnullBindable overlay instance (read-only)
childrenSnippetundefinedChild content (alternative to content prop)

Feature Tooltips with Interaction

<script>
	import { Map, Layer, Feature, Overlay, Interaction } from 'svelte-openlayers';

	const cities = [
		{
			name: 'New York',
			coords: [-74.0, 40.7],
			population: 8000000,
			description: 'The largest city in the United States.'
		},
		{
			name: 'Los Angeles',
			coords: [-118.2, 34.0],
			population: 4000000,
			description: 'The entertainment capital of the world.'
		}
	];

	let hoveredFeature = null;
	let tooltipPosition = [0, 0];

	const handleHover = (feature, coordinate) => {
		hoveredFeature = feature;
		tooltipPosition = coordinate || [0, 0];
	};

	const handleHoverEnd = () => {
		hoveredFeature = null;
	};
</script>

<Map.Root>
	<Map.View center={[-96, 38]} zoom={4} />
	<Layer.Tile source="osm" />

	<Layer.Vector>
		{#each cities as city}
			<Feature.Point
				coordinates={city.coords}
				properties={city}
				style={{
					circle: { radius: 8, fill: { color: '#2196F3' }, stroke: { color: 'white', width: 2 } }
				}}
			/>
		{/each}
	</Layer.Vector>

	<Interaction.Hover onHover={handleHover} onHoverEnd={handleHoverEnd} />

	{#if hoveredFeature}
		<Overlay.Tooltip position={tooltipPosition} class="city-tooltip">
			<div class="tooltip-content">
				<strong>{hoveredFeature.get('name')}</strong><br />
				Population: {hoveredFeature.get('population').toLocaleString()}
			</div>
		</Overlay.Tooltip>
	{/if}
</Map.Root>

<style>
	:global(.city-tooltip) {
		background: rgba(0, 0, 0, 0.8);
		color: white;
		padding: 8px 12px;
		border-radius: 4px;
		font-size: 12px;
		white-space: nowrap;
		pointer-events: none;
	}
</style>

TooltipManager

A higher-level component that automatically manages tooltips for hover and select interactions.

Basic Usage

<script>
	import { Map, Layer, Feature, Overlay } from 'svelte-openlayers';

	const cities = [
		{ name: 'New York', coords: [-74.0, 40.7], population: 8000000 },
		{ name: 'Los Angeles', coords: [-118.2, 34.0], population: 4000000 }
	];

	const getHoverContent = (feature) => {
		return feature.get('name') + ' (' + feature.get('population').toLocaleString() + ')';
	};

	const getSelectContent = (feature) => {
		return 'Selected: ' + feature.get('name');
	};
</script>

<Map.Root>
	<Map.View center={[-96, 38]} zoom={4} />
	<Layer.Tile source="osm" />

	<Layer.Vector>
		{#each cities as city}
			<Feature.Point coordinates={city.coords} properties={city} />
		{/each}
	</Layer.Vector>

	<Overlay.TooltipManager
		hoverTooltip={true}
		selectTooltip={true}
		hoverContent={getHoverContent}
		selectContent={getSelectContent}
	/>
</Map.Root>

Props

PropTypeDefaultDescription
layersLayer[]undefinedLayers to show tooltips for
hitTolerancenumberundefinedHit detection tolerance
hoverTooltipbooleanfalseEnable hover tooltips
selectTooltipbooleanfalseEnable selection tooltips
hoverContent(feature: Feature) => stringundefinedFunction to generate hover tooltip content
selectContent(feature: Feature) => stringundefinedFunction to generate select tooltip content
hoverSnippetSnippet<[Feature]>undefinedSvelte snippet for hover tooltip content
selectSnippetSnippet<[Feature]>undefinedSvelte snippet for select tooltip content
hoverPositioningPositioning options (same as Overlay.Tooltip)'top-center'Hover tooltip positioning
selectPositioningPositioning options (same as Overlay.Tooltip)'bottom-center'Select tooltip positioning
hoverClassstringundefinedCSS class for hover tooltips
selectClassstringundefinedCSS class for select tooltips
selectStyleStyleLikeundefinedStyle for selected features