JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 19
  • Score
    100M100P100Q61489F
  • License MIT

Open source custom map library for Expo/React Native. Use your own tiles without Google Maps, Mapbox, or API keys. Created by ChaufFleet.

Package Exports

  • @chauffleet/expo-custom-map
  • @chauffleet/expo-custom-map/lib/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@chauffleet/expo-custom-map) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

🗺️ Expo Custom Map

Une bibliothèque de carte personnalisée ultra-fluide pour React Native et Expo, optimisée pour offrir une expérience comparable à Google Maps.

✨ Caractéristiques

  • 🚀 Fluidité Google Maps - Gestes natifs ultra-optimisés avec react-native-gesture-handler
  • ⚡ Performance 60fps - Animations sur UI Thread avec react-native-reanimated
  • 📱 Expo Compatible - Fonctionne parfaitement dans l'environnement Expo
  • 🎯 Gestes Intuitifs - Pan, pinch-to-zoom, inertie fluide
  • 🗂️ Cache Intelligent - Système de cache des tuiles optimisé
  • 🔧 TypeScript - Support complet TypeScript avec types robustes

🚀 Installation

npm install @chauffleet/expo-custom-map

Dépendances requises

npx expo install react-native-gesture-handler react-native-reanimated

📖 Utilisation de base

import React from 'react';
import { View } from 'react-native';
import { CustomMapView } from '@chauffleet/expo-custom-map';

export default function App() {
  return (
    <View style={{ flex: 1 }}>
      <CustomMapView
        style={{ flex: 1 }}
        initialRegion={{
          latitude: 48.8566,   // Paris
          longitude: 2.3522,
          latitudeDelta: 0.0922,
          longitudeDelta: 0.0421,
        }}
        tileUrlTemplate="https://tile.openstreetmap.org/{z}/{x}/{y}.png"
        onRegionChange={(region) => console.log('Région:', region)}
        onRegionChangeComplete={(region) => console.log('Fini:', region)}
      >
        {/* Vos composants personnalisés */}
      </CustomMapView>
    </View>
  );
}

🎛️ Props de CustomMapView

Prop Type Défaut Description
initialRegion MapRegion Paris Région initiale de la carte
tileUrlTemplate string OpenStreetMap Template d'URL pour les tuiles
onRegionChange (region: MapRegion) => void - Callback pendant le mouvement
onRegionChangeComplete (region: MapRegion) => void - Callback à la fin du mouvement
style ViewStyle - Style du conteneur
children ReactNode - Éléments enfants (marqueurs, etc.)

🔧 Configuration avancée

Fournisseurs de tuiles

// OpenStreetMap (défaut)
tileUrlTemplate="https://tile.openstreetmap.org/{z}/{x}/{y}.png"

// Mapbox (nécessite une clé API)
tileUrlTemplate="https://api.mapbox.com/styles/v1/mapbox/streets-v11/tiles/{z}/{x}/{y}?access_token=YOUR_TOKEN"

// CartoDB Positron
tileUrlTemplate="https://cartodb-basemaps-a.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"

Hooks disponibles

import { useMapPerformance, useAdvancedTileCache, useFluidGestures } from '@chauffleet/expo-custom-map';

// Monitoring des performances
const { stats, startMonitoring } = useMapPerformance();

// Cache intelligent des tuiles
const { preloadRegion, getCacheStats } = useAdvancedTileCache();

// Gestes personnalisés
const { gestureState } = useFluidGestures({
  enableInertia: true,
  zoomSensitivity: 1.2
});

🎨 Composants

TileLayer

Système de rendu des tuiles ultra-optimisé avec cache intelligent.

MarkerComponent

Marqueurs personnalisables avec gestion des événements.

ClusterMarker

Regroupement automatique des marqueurs pour de meilleures performances.

⚡ Optimisations

  • UI Thread - Toutes les animations s'exécutent sur l'UI thread
  • Memoization - Cache agressif des calculs coûteux
  • Lazy Loading - Chargement intelligent des tuiles
  • Memory Management - Gestion automatique de la mémoire
  • Gesture Optimization - Minimal runOnJS() calls

🔧 Développement

# Cloner le repo
git clone https://github.com/chauffleet/expo-custom-map.git

# Installer les dépendances
npm install

# Compiler
npm run build

# Tester
npm test

# Exemple
npm run example

📱 Exemples

Voir le fichier Example.tsx pour un exemple d'utilisation complète.

🐛 Dépannage

Gestes qui ne fonctionnent pas

Assurez-vous d'avoir installé react-native-gesture-handler et suivi la configuration Expo.

Performance faible

  • Vérifiez que react-native-reanimated est correctement configuré
  • Utilisez les hooks de performance pour identifier les goulots d'étranglement

Tuiles qui ne se chargent pas

Vérifiez le template d'URL des tuiles et votre connexion réseau.

📄 Licence

MIT - Voir le fichier LICENSE

🤝 Contribution

Les contributions sont bienvenues ! Voir CONTRIBUTING.md

🔗 Liens


Développé avec ❤️ pour la communauté React Native et Expo