@watergis/svelte-maplibre-style-switcher

@watergis/svelte-maplibre-style-switcher is a svelte component to add style switch control for maplibre-gl.

Demo

Style switch control

©OpenStreetMap contributors | ©NARWASSCO,Ltd. | MapLibre

Usage

Install the package

npm i @watergis/svelte-maplibre-style-switcher
yarn add @watergis/svelte-maplibre-style-switcher
pnpm i @watergis/svelte-maplibre-style-switcher

Example

<script lang="ts">import { onMount } from 'svelte';
import { Map } from 'maplibre-gl';
import { MenuControl } from '@watergis/svelte-maplibre-menu';
import { StyleSwitcher, StyleSwitcherControl, StyleUrl } from '@watergis/svelte-maplibre-style-switcher';
let mapContainer;
// create maplibre.Map object
let map = new Map();
let styles = [
    {
        title: 'UNVT Water (OSM)',
        uri: `https://narwassco.github.io/mapbox-stylefiles/unvt/style.json`
    },
    {
        title: 'Satellite Water',
        uri: `https://narwassco.github.io/mapbox-stylefiles/unvt/style-aerial.json`
    }
];
let selectedStyle = styles[0];
onMount(async () => {
    const styleUrlObj = new StyleUrl();
    selectedStyle = styleUrlObj.getInitialStyle(styles);
    map = new Map({
        container: mapContainer,
        style: selectedStyle.uri
    });
});
</script>

<MenuControl bind:map position={'top-right'} bind:isMenuShown>
	<div slot="sidebar" class="primary-container">
		<h4>Style switch control</h4>
		<!-- control to add select box for map styles -->
		<StyleSwitcher bind:map bind:styles bind:selectedStyle />
	</div>
	<div slot="map">
		<div class="map" bind:this={mapContainer} />
		<!-- maplibre control to select map styles with a preview -->
		<StyleSwitcherControl bind:map bind:styles bind:selectedStyle position="top-left" />
	</div>
</MenuControl>

<style lang="scss">@import 'maplibre-gl/dist/maplibre-gl.css';
.map {
  width: 100%;
  height: 100%;
  z-index: 1;
}

.primary-container {
  margin: 0.5rem;
}</style>