React Native Leaflet: Мощная картографическая библиотека для мобильных приложений

Опубликовано 24 сентября 2025 AntonSeagull 2 min

Когда мы разрабатываем веб-приложения, у нас есть отличная библиотека Leaflet.js — легкая, гибкая и мощная. Она предоставляет все необходимые инструменты для работы с картами: маркеры, полилинии, полигоны, различные типы слоев и многое другое.

Но что происходит, когда мы переходим к разработке мобильных приложений на React Native? Стандартные решения для карт в React Native часто ограничены в функциональности:

  • react-native-maps — хорошая библиотека, но с ограниченными возможностями кастомизации
  • Mapbox — мощная, но дорогая и сложная в настройке
  • Google Maps — требует API ключи и имеет ограничения

Решение: React Native Leaflet Plus

Именно поэтому я создал react-native-leaflet-plus — библиотеку, которая приносит всю мощь Leaflet.js в мир React Native приложений.

🎯 Ключевые особенности

Полная поддержка Leaflet.js

  • Все возможности популярной веб-библиотеки Leaflet
  • Знакомый API для веб-разработчиков
  • Богатый набор функций из коробки

Векторные карты

  • Встроенная поддержка Protomaps
  • Высокое качество отображения на любых экранах
  • Меньший объем данных для загрузки

Интерактивное редактирование

  • Редактирование полигонов и прямоугольников
  • Drag & drop функциональность
  • События для обработки пользовательских действий

Производительность

  • Эффективное управление памятью
  • Оптимизированный рендеринг через WebView
  • Поддержка больших наборов данных

🚀 Простота использования

Библиотека спроектирована с учетом простоты использования. Вот как легко добавить карту в ваше приложение:

import React from 'react';
import { View, StyleSheet } from 'react-native';
import { LeafletMap, Marker, Polyline } from 'react-native-leaflet-plus';

export default function MapScreen() {
  return (
    <View style={styles.container}>
      <LeafletMap
        style={styles.map}
        options={{
          center: [55.7558, 37.6176], // Москва
          zoom: 13,
        }}
        tileLayer={{
          url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
          options: {
            attribution: '© OpenStreetMap contributors',
          },
        }}
      >
        <Marker
          uniqueId="marker1"
          latlng={[55.7558, 37.6176]}
          options={{
            title: 'Москва',
          }}
          onPress={() => console.log('Маркер нажат!')}
        />

        <Polyline
          uniqueId="route1"
          latlngs={[
            [55.7558, 37.6176],
            [55.7522, 37.6156],
            [55.75, 37.62],
          ]}
          options={{
            color: 'blue',
            weight: 3,
          }}
        />
      </LeafletMap>
    </View>
  );
}

🎨 Гибкость и кастомизация

Векторные карты с Protomaps

<LeafletMap
  protomapsLayer={{
    url: 'https://api.protomaps.com/tiles/v3.json?key=YOUR_KEY',
    flavor: 'light',
  }}
/>

Кастомные маркеры

<Marker
  uniqueId="custom-marker"
  latlng={[55.7558, 37.6176]}
  options={{
    icon: {
      divIcon: {
        html: '<div style="background: red; width: 20px; height: 20px; border-radius: 50%;"></div>',
        iconSize: [20, 20],
      },
    },
  }}
/>

Интерактивное редактирование

<Rectangle
  uniqueId="editable-rect"
  latlngs={[
    [55.7, 37.6],
    [55.8, 37.7],
  ]}
  options={{
    editable: true,
    color: 'blue',
  }}
  onEdit={(event) => {
    console.log('Прямоугольник отредактирован:', event.latlngs);
  }}
/>

📱 События и программное управление

Библиотека предоставляет богатый набор событий и методов для программного управления картой:

<LeafletMap
  onMove={(event) => console.log('Карта перемещена:', event.latlng)}
  onZoom={(event) => console.log('Масштаб изменен:', event.zoom)}
  onLoad={() => console.log('Карта загружена')}
  ref={mapRef}
/>;

// Программное управление
mapRef.current?.flyTo([55.7558, 37.6176], 15);
mapRef.current?.setZoom(10);
mapRef.current?.fitBounds([
  [55.7, 37.6],
  [55.8, 37.7],
]);

🛠️ Установка и настройка

Установка библиотеки проста:

npm install react-native-leaflet-plus react-native-webview @react-native-async-storage/async-storage

🎯 Когда использовать React Native Leaflet Plus

Библиотека идеально подходит для:

  • Навигационных приложений — с поддержкой маршрутов и маркеров
  • Геопространственной визуализации — отображение данных на картах
  • Интерактивных карт — с возможностью редактирования
  • Приложений с векторными картами — высокое качество отображения
  • Проектов, требующих гибкости — когда стандартные решения недостаточны

🚀 Будущее библиотеки

React Native Leaflet Plus активно развивается и включает:

  • ✅ Полная поддержка TypeScript
  • ✅ Богатая документация с примерами
  • ✅ Поддержка всех основных компонентов Leaflet
  • ✅ Оптимизация производительности
  • ✅ Регулярные обновления и исправления

📚 Заключение

Если вы ищете мощное, гибкое и простое в использовании решение для карт в React Native, react-native-leaflet-plus — это именно то, что вам нужно. Библиотека объединяет лучшие стороны веб-разработки с возможностями мобильных приложений.

Попробуйте библиотеку в своем проекте:


Сделано с ❤️ для сообщества React Native

Статья помогла? Подарите мне чашку кофе ☕