Gratis kaarttegels voor je websites en apps Snel. Gratis. Voor altijd.

Onbeperkt vectortegels op basis van OpenStreetMap-data, direct te gebruiken met MapLibre GL of Leaflet. Geen API-sleutel, geen quotum, geen onverwachte factuur.

Mogelijk gemaakt door OpenFreeMap 🚀

Waarom kaarttegels duur worden (en LFMaps gratis blijft)

De meeste aanbieders van kaarttegels verwelkomen je met gratis tegoed. Maar als je bezoekersaantallen groeien, verandert betalen naar gebruik een klein experiment in een flinke rekening. Onduidelijke tellers, kosten voor elke geladen kaart en prijspagina’s waarvoor je een spreadsheet nodig hebt. Google Maps en Mapbox werken allebei zo. Wat gratis leek, wordt een kostenpost waar je project misschien niet op zit te wachten.

Bij LFMaps werkt het anders. Gratis is gratis: geen verrassingen, geen limieten, geen facturen.

Waarom LFMaps kiezen voor gratis kaarttegels?

Alles wat je nodig hebt om een kaart te publiceren. Zonder overbodige extra’s.

Geen API-sleutel nodig

Voeg de tegel-URL toe en je kunt aan de slag. Geen registratie, geen toegangstoken, geen dashboard.

Onbeperkt kaarttegels opvragen

Geen quota, geen verborgen limieten, geen teller voor geladen kaarten. Gebruik wat je nodig hebt.

Voor altijd gratis

Kosteloos bij elk bezoekersaantal, of je kaart nu tien of tien miljoen keer wordt bekeken.

Geen tracking, geen gegevensverzameling

We volgen je bezoekers niet en plaatsen geen cookies. Je privacybeleid blijft net zo kort als het was.

Live demo van vectortegels: drie kaartstijlen

Zo voeg je gratis kaarttegels toe aan je website

Werkt het best met MapLibre GL, maar ook met Leaflet of React

Stap 1: Voeg MapLibre GL toe aan je HTML

<link href="https://unpkg.com/maplibre-gl@6.11.2/dist/maplibre-gl.css" rel="stylesheet" />
<script type="importmap">
  { "imports": { "maplibre-gl": "https://unpkg.com/maplibre-gl@6.11.2/dist/maplibre-gl.mjs" } }
</script>

MapLibre GL v6 is uitsluitend beschikbaar als ES-modules. Daarom laden deze voorbeelden de bibliotheek via een import map en een modulescript.

Of installeer via npm

npm i maplibre-gl@^6

Importeer het daarna in je JavaScript:

import * as maplibregl from 'maplibre-gl'
import 'maplibre-gl/dist/maplibre-gl.css'
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url'

maplibregl.setWorkerUrl(workerUrl)

Binnen een bundle kan MapLibre zijn worker niet zelf vinden. Dit is de variant voor Vite; voor webpack en andere bundlers raadpleeg je de installatiehandleiding van MapLibre.

Stap 2: Maak je kaart

<div id="map" style="width: 100%; height: 500px"></div>
<script type="module">
  import * as maplibregl from 'maplibre-gl'

  const map = new maplibregl.Map({
    style: 'https://data.lfmaps.fr/styles/bright',
    center: [6.1844, 48.6937],
    zoom: 12,
    container: 'map',
  })
</script>

Tip: laad MapLibre pas wanneer nodig voor betere Core Web Vitals

Aanbevolen

Waarom dit helpt:

Verbetert Largest Contentful Paint (LCP)
Verlaagt First Input Delay (FID)
Houdt Cumulative Layout Shift (CLS) onder controle
Bespaart ongeveer 750 KB bij het eerste laden

Betere Core Web Vitals zorgen vaak voor een hogere positie in zoekresultaten

Gebruik deze loader om de pagina sneller voor het eerst weer te geven:

// Variant voor Vite; zie de installatiehandleiding voor andere bundlers
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';

let maplibrePromise = null;
let cssLoaded = false;

/**
 * Laadt MapLibre GL en de bijbehorende CSS pas wanneer nodig
 * @returns {Promise} De MapLibre GL-module
 */
async function loadMapLibre() {
    if (!maplibrePromise) {
        maplibrePromise = Promise.all([
            import('maplibre-gl'),
            loadMapLibreCSS()
        ]).then(([module]) => {
            module.setWorkerUrl(workerUrl);
            return module;
        });
    }
    return maplibrePromise;
}

/**
 * Laadt de CSS van MapLibre GL dynamisch
 */
async function loadMapLibreCSS() {
    if (!cssLoaded) {
        await import('maplibre-gl/dist/maplibre-gl.css');
        cssLoaded = true;
    }
}

/**
 * Klasse voor het uitgesteld laden van MapLibre GL
 * Biedt een API vergelijkbaar met maplibregl, maar met uitgesteld laden
 */
export class MapLibreLoader {
    constructor() {
        this.maplibregl = null;
    }

    /**
     * Maakt een nieuwe kaartinstantie en laadt MapLibre GL indien nodig
     * @param {Object} options - Configuratieopties voor de kaart
     * @returns {Promise} Een Map-instantie van MapLibre GL
     */
    async createMap(options) {
        this.maplibregl = await loadMapLibre();
        return new this.maplibregl.Map(options);
    }

    /**
     * Haalt de MapLibre GL-bibliotheek op en laadt deze indien nodig
     * @returns {Promise} De MapLibre GL-bibliotheek
     */
    async getLibrary() {
        this.maplibregl = await loadMapLibre();
        return this.maplibregl;
    }
}

export default new MapLibreLoader();

Gebruiksvoorbeeld:

import MapLibreLoader from './maplibre-loader.js';

// Maak de kaart pas wanneer nodig (bijvoorbeeld bij scrollen of een gebruikersactie)
async function initMap() {
    const map = await MapLibreLoader.createMap({
        style: 'https://data.lfmaps.fr/styles/bright',
        center: [6.1844, 48.6937],
        zoom: 12,
        container: 'map',
    });
    
    // Voeg bedieningselementen, markeringen enzovoort toe
    const maplibregl = await MapLibreLoader.getLibrary();
    map.addControl(new maplibregl.NavigationControl());
}

Voor geavanceerde functies en de volledige API raadpleeg je de documentatie van MapLibre GL JS

Gebruik je Leaflet? Voeg gratis kaarttegels toe met één plug-in

Leaflet kan zelf geen vectortegels lezen. Gebruik het daarom samen met de plug-in maplibre-gl-leaflet:

<link href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" rel="stylesheet" />
<script type="importmap">
  { "imports": {
    "leaflet": "https://unpkg.com/leaflet@1.9.4/dist/leaflet-src.esm.js",
    "maplibre-gl": "https://unpkg.com/maplibre-gl@6.11.2/dist/maplibre-gl.mjs"
  } }
</script>

<script type="module">
  import * as L from 'leaflet'
  import { maplibreGL } from 'https://unpkg.com/@maplibre/maplibre-gl-leaflet@0.1.4/dist/leaflet-maplibre-gl.mjs'

  const map = L.map('map').setView([48.6937, 6.1844], 12)
  maplibreGL({
    style: 'https://data.lfmaps.fr/styles/bright',
  }).addTo(map)
</script>

De plug-in ondersteunt Leaflet 1.x: dezelfde gratis kaarttegels, zonder rekening.

Gratis kaarttegels in React

npm i react-map-gl maplibre-gl@^6
import Map from 'react-map-gl/maplibre'
import { setWorkerUrl } from 'maplibre-gl'
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url'
import 'maplibre-gl/dist/maplibre-gl.css'

setWorkerUrl(workerUrl)

export default function MyMap() {
  return (
    <Map
      initialViewState={{ longitude: 6.1844, latitude: 48.6937, zoom: 12 }}
      style={{ width: '100%', height: 500 }}
      mapStyle="https://data.lfmaps.fr/styles/bright"
    />
  )
}

Geen mapbox-gl, geen toegangstoken: react-map-gl communiceert rechtstreeks met MapLibre GL.

Gratis kaartstijlen: bright, positron en liberty

  • https://data.lfmaps.fr/styles/bright
  • https://data.lfmaps.fr/styles/positron
  • https://data.lfmaps.fr/styles/liberty

Gemaakt voor snelheid: kaarttegels wereldwijd snel geleverd

Razendsnel

Kaarttegels via een CDN, zodat kaarten in een oogwenk verschijnen

Betrouwbaar

99,9% beschikbaarheid

Wereldwijde dekking

OpenStreetMap-data voor de hele wereld

Eenvoudig te integreren

Een paar regels MapLibre GL of Leaflet en je kaart staat online

Een gratis alternatief voor Google Maps en Mapbox

Hetzelfde resultaat: een kaart op je pagina. Een heel andere rekening aan het eind van de maand.

Betaalde aanbieders van kaarttegels

  • Een gratis abonnement, daarna betalen per geladen kaart zodra je de limiet overschrijdt
  • Een API-sleutel die je moet aanmaken, beveiligen en regelmatig vervangen
  • Gebruiksdashboards, quota en factuurmeldingen om in de gaten te houden
  • Verzameling van analysegegevens over de gebruikers van je kaart

LFMaps

  • Gratis bij elk bezoekersaantal: er is geen limiet om te overschrijden
  • Geen API-sleutel, want er is geen account
  • Niets om bij te houden: plak een stijl-URL en ga verder
  • Geen tracking van jou of je bezoekers

De afweging: LFMaps biedt uitsluitend kaarttegels. Geocodering, routeberekening en stapsgewijze navigatie maken geen deel uit van de dienst.

Gratis kaarttegels: veelgestelde vragen

Is LFMaps echt gratis?

Ja. Er is geen betaald abonnement, geen creditcard nodig en geen rekening voor je gebruik, ongeacht je bezoekersaantallen. LFMaps wordt gefinancierd als nevenproject, net als de andere gratis tools op deze pagina.

Heb ik een API-sleutel of een account nodig?

Nee. Je hoeft je nergens voor te registreren en geen tokens te vervangen. Stel een LFMaps-URL in als kaartstijl en het werkt.

Zijn er limieten of quota voor het opvragen van kaarttegels?

Er zijn geen quota en geen vaste limiet op het aantal verzoeken per seconde. We vragen alleen om niet de volledige tegelset in bulk te downloaden. Normaal kaartgebruik op een website of in een app is prima.

Werkt LFMaps zowel met Leaflet als met MapLibre GL?

Ja. MapLibre GL geeft vectortegels rechtstreeks weer en is onze aanbeveling. Leaflet werkt ook, met de plug-in maplibre-gl-leaflet.

Waar komen de kaartgegevens vandaan?

Van OpenStreetMap, geleverd via OpenFreeMap. De gegevens worden door de gemeenschap gemaakt, en juist daardoor kunnen ze gratis blijven.

Mag ik LFMaps op een commerciële website gebruiken?

Ja, ook commerciële projecten zijn welkom. Zorg dat de bronvermelding van OpenStreetMap zichtbaar blijft op de kaart. Dat is de enige voorwaarde.

Volgen jullie mijn bezoekers?

Nee. We verzamelen geen persoonsgegevens en plaatsen geen cookies bij het opvragen van kaarttegels. Een kaart toevoegen betekent dus geen aanvulling op je privacybeleid.

Wat is het verschil met Google Maps of Mapbox?

Die bieden een gratis abonnement en rekenen daarna per geladen kaart zodra je gebruik groeit. LFMaps heeft helemaal geen teller: de prijs is nul bij tien kaartweergaven én bij tien miljoen.