Безкоштовні тайли карт для ваших сайтів і застосунків Швидко. Безкоштовно. Назавжди.

Необмежені векторні тайли карт на основі даних OpenStreetMap, готові до роботи з MapLibre GL або Leaflet. Без ключа API, квот і несподіваних рахунків.

Працює завдяки OpenFreeMap 🚀

Чому тайли карт дорожчають (і чому LFMaps залишається безкоштовним)

Більшість постачальників тайлів карт вітають вас безкоштовним лімітом. Потім відвідуваність зростає, і оплата за використання перетворює невеликий експеримент на відчутні витрати: незрозумілі лічильники, плата за кожне завантаження карти й тарифи, для розрахунку яких потрібна таблиця. Так працюють і Google Maps, і Mapbox. Те, що здавалося безкоштовним, стає витратою, яка вашому проєкту може бути ні до чого.

У LFMaps усе інакше. Безкоштовно означає безкоштовно: без сюрпризів, обмежень і рахунків.

Чому варто обрати LFMaps для безкоштовних тайлів карт?

Усе необхідне для запуску карти. Нічого зайвого.

Ключ API не потрібен

Додайте URL тайлів — і все готово. Без реєстрації, токенів доступу й панелі керування.

Необмежені запити тайлів

Без квот, прихованих лімітів і плати за завантаження карти. Використовуйте стільки, скільки потрібно.

Безкоштовно назавжди

Жодних витрат за будь-якої відвідуваності: хоч десять переглядів карти, хоч десять мільйонів.

Без відстеження та збору даних

Ми не відстежуємо ваших відвідувачів і не встановлюємо файлів cookie. Ваша політика конфіденційності залишається такою ж короткою.

Інтерактивне демо векторних тайлів — три стилі карт

Як додати безкоштовні тайли карт на свій сайт

Найкраще працює з MapLibre GL, а також із Leaflet і React

Крок 1. Додайте MapLibre GL до 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 постачається лише у вигляді ES-модулів, тому ці приклади завантажують його через карту імпорту та модульний скрипт.

Або встановіть через npm

npm i maplibre-gl@^6

Потім імпортуйте у свій 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)

У складі збірки MapLibre не може самостійно знайти свій worker. Це варіант для Vite; для webpack та інших збирачів дивіться посібник зі встановлення MapLibre.

Крок 2. Створіть карту

<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>

Порада: відкладене завантаження MapLibre покращує Core Web Vitals

Рекомендовано

Чим це корисно:

Покращує Largest Contentful Paint (LCP)
Зменшує First Input Delay (FID)
Допомагає контролювати Cumulative Layout Shift (CLS)
Заощаджує близько 750 КБ під час першого завантаження

Кращі Core Web Vitals часто означають вищі позиції в пошуку

Використайте цей завантажувач, щоб прискорити початкове відображення:

// Варіант для Vite; для інших збирачів дивіться посібник зі встановлення
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';

let maplibrePromise = null;
let cssLoaded = false;

/**
 * Відкладено завантажує MapLibre GL та його CSS за потреби
 * @returns {Promise} Модуль MapLibre GL
 */
async function loadMapLibre() {
    if (!maplibrePromise) {
        maplibrePromise = Promise.all([
            import('maplibre-gl'),
            loadMapLibreCSS()
        ]).then(([module]) => {
            module.setWorkerUrl(workerUrl);
            return module;
        });
    }
    return maplibrePromise;
}

/**
 * Динамічно завантажує CSS MapLibre GL
 */
async function loadMapLibreCSS() {
    if (!cssLoaded) {
        await import('maplibre-gl/dist/maplibre-gl.css');
        cssLoaded = true;
    }
}

/**
 * Клас відкладеного завантаження MapLibre GL
 * Надає API, подібний до maplibregl, але з відкладеним завантаженням
 */
export class MapLibreLoader {
    constructor() {
        this.maplibregl = null;
    }

    /**
     * Створює новий екземпляр карти, за потреби відкладено завантажуючи MapLibre GL
     * @param {Object} options - Параметри налаштування карти
     * @returns {Promise} Екземпляр Map об’єкта MapLibre GL
     */
    async createMap(options) {
        this.maplibregl = await loadMapLibre();
        return new this.maplibregl.Map(options);
    }

    /**
     * Отримує бібліотеку MapLibre GL, за потреби завантажуючи її відкладено
     * @returns {Promise} Бібліотека MapLibre GL
     */
    async getLibrary() {
        this.maplibregl = await loadMapLibre();
        return this.maplibregl;
    }
}

export default new MapLibreLoader();

Приклад використання:

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

// Створюйте карту лише за потреби (наприклад, під час прокручування або взаємодії користувача)
async function initMap() {
    const map = await MapLibreLoader.createMap({
        style: 'https://data.lfmaps.fr/styles/bright',
        center: [6.1844, 48.6937],
        zoom: 12,
        container: 'map',
    });
    
    // Додайте елементи керування, маркери тощо.
    const maplibregl = await MapLibreLoader.getLibrary();
    map.addControl(new maplibregl.NavigationControl());
}

Розширені можливості й повний опис API наведено в документації MapLibre GL JS

Використовуєте Leaflet? Додайте безкоштовні тайли за допомогою одного плагіна

Leaflet не вміє самостійно читати векторні тайли, тому використайте плагін 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>

Плагін підтримує Leaflet 1.x: ті самі безкоштовні тайли без жодних рахунків.

Безкоштовні тайли карт у 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"
    />
  )
}

Без mapbox-gl і токена доступу: react-map-gl працює безпосередньо з MapLibre GL.

Безкоштовні стилі карт: bright, positron і liberty

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

Швидкість передусім: швидка доставка тайлів карт у всьому світі

Блискавична швидкість

Тайли надходять через CDN, тож карти з’являються миттєво

Надійність

Доступність 99.9%

Покриття всього світу

Дані OpenStreetMap охоплюють увесь світ

Проста інтеграція

Кілька рядків MapLibre GL або Leaflet — і все працює

Безкоштовна альтернатива Google Maps і Mapbox

Завдання те саме — карта на вашій сторінці. А рахунок наприкінці місяця зовсім інший.

Платні постачальники тайлів карт

  • Безкоштовний ліміт, а після його перевищення — плата за кожне завантаження карти
  • Ключ API, який потрібно створювати, захищати й оновлювати
  • Панелі статистики, квоти й сповіщення про оплату, за якими треба стежити
  • Збір аналітики про користувачів вашої карти

LFMaps

  • Безкоштовно за будь-якої відвідуваності: лічильника просто немає
  • Без ключа API, адже обліковий запис не потрібен
  • Нічого контролювати: вставте URL стилю й працюйте далі
  • Без відстеження вас і ваших відвідувачів

Чесно про обмеження: LFMaps надає лише тайли карт. Геокодування, прокладання маршрутів і покрокова навігація до сервісу не входять.

Безкоштовні тайли карт: поширені запитання

LFMaps справді безкоштовний?

Так. Немає платного тарифу, потреби у кредитній картці чи рахунків за використання — незалежно від відвідуваності. LFMaps фінансується як побічний проєкт, як і решта безкоштовних інструментів на цій сторінці.

Чи потрібен ключ API або обліковий запис?

Ні. Реєструватися не потрібно, а токени не доведеться оновлювати. Просто вкажіть URL LFMaps як адресу стилю карти — і все працює.

Чи є обмеження частоти запитів або квоти на тайли карт?

Немає ані квот, ані жорсткого обмеження частоти запитів. Просимо лише не завантажувати масово весь набір тайлів. Звичайне використання карти на сайті чи в застосунку цілком прийнятне.

Чи працює LFMaps із Leaflet, а не лише з MapLibre GL?

Так. MapLibre GL відображає векторні тайли без додаткових засобів, тому ми рекомендуємо саме його. Leaflet також працює з плагіном maplibre-gl-leaflet.

Звідки надходять дані карти?

З OpenStreetMap через OpenFreeMap. Дані створює спільнота — саме тому вони можуть залишатися безкоштовними.

Чи можна використовувати LFMaps на комерційному сайті?

Так, зокрема й у комерційних проєктах. Залиште зазначення авторства OpenStreetMap видимим на карті — це єдина вимога.

Чи відстежуєте ви моїх відвідувачів?

Ні. Ми не збираємо персональних даних і не встановлюємо файлів cookie під час запитів тайлів, тож додавання карти не потребує змін у вашій політиці конфіденційності.

Чим LFMaps відрізняється від Google Maps або Mapbox?

Ці сервіси надають безкоштовний ліміт, а коли ви його перевищуєте, стягують плату за кожне завантаження карти. У LFMaps узагалі немає лічильника: ціна дорівнює нулю і за десять переглядів, і за десять мільйонів.