Communitygithub.com

YepAPI/skills

Intégration de Mapbox/Leaflet, géocodage, localisateurs de magasins, regroupement de marqueurs et affichage d'itinéraires.

Qu'est-ce que skills ?

Cette compétence fournit des directives et des modèles pour intégrer des cartes interactives et des fonctionnalités de géolocalisation dans des applications web. Elle prend en charge Mapbox GL JS (via le wrapper React `react-map-gl`) et Leaflet (via `react-leaflet`), avec des instructions claires sur la gestion des clés API via la variable d'environnement `NEXT_PUBLIC_MAPBOX_TOKEN`. La compétence couvre le géocodage (Mapbox Geocoding API ou OpenStreetMap Nominatim), le regroupement de marqueurs avec `supercluster` pour les ensembles de données volumineux, le modèle de localisateur de magasins (géocodage de l'utilisateur → recherche de proximité avec la formule de Haversine ou PostGIS), et l'affichage d'itinéraires via l'API Mapbox Directions. Elle met en garde contre le rendu côté serveur des composants cartographiques, le rendu de milliers de marqueurs sans regroupement, les coordonnées codées en dur et le fait d'ignorer le refus d'autorisation de géolocalisation, en préconisant des solutions de repli appropriées.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/maps-geolocation

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Cartes et Géolocalisation

Règles

  • Mapbox GL JS pour des cartes interactives riches – react-map-gl comme wrapper React
  • Leaflet comme alternative gratuite – react-leaflet pour React, aucune clé API requise pour les tuiles de base
  • Gestion des clés API : NEXT_PUBLIC_MAPBOX_TOKEN pour Mapbox côté client, ne jamais exposer les secrets côté serveur
  • Géocodage : convertir des adresses en coordonnées – API de géocodage Mapbox ou OpenStreetMap Nominatim (gratuit)
  • Regroupement de marqueurs : utiliser supercluster ou le regroupement intégré de Mapbox pour les grands ensembles de marqueurs (100+)
  • Modèle de localisateur de magasins : géocoder la position de l'utilisateur → interroger les magasins à proximité avec Haversine/PostGIS → afficher sur la carte
  • Affichage d'itinéraires : API Directions Mapbox pour les itinéraires en voiture/à pied, rendu sous forme de couche GeoJSON LineString
  • Géolocalisation du navigateur : navigator.geolocation.getCurrentPosition() – toujours gérer gracieusement le refus d'autorisation
  • Charger paresseusement le composant cartographique – les cartes sont lourdes ; utiliser dynamic(() => import("./Map"), { ssr: false })

Modèles

// react-map-gl avec Mapbox
import Map, { Marker, NavigationControl } from "react-map-gl";
import "mapbox-gl/dist/mapbox-gl.css";

function StoreMap({ stores }: { stores: Store[] }) {
  return (
    <Map
      initialViewState={{ longitude: -122.4, latitude: 37.8, zoom: 11 }}
      mapboxAccessToken={process.env.NEXT_PUBLIC_MAPBOX_TOKEN}
      mapStyle="mapbox://styles/mapbox/streets-v12"
      style={{ width: "100%", height: 400 }}
    >
      <NavigationControl position="top-right" />
      {stores.map((store) => (
        <Marker key={store.id} longitude={store.lng} latitude={store.lat}>
          <Pin />
        </Marker>
      ))}
    </Map>
  );
}
// Distance Haversine pour la recherche de proximité
function haversineDistance(lat1: number, lon1: number, lat2: number, lon2: number): number {
  const R = 6371; // km
  const dLat = ((lat2 - lat1) * Math.PI) / 180;
  const dLon = ((lon2 - lon1) * Math.PI) / 180;
  const a = Math.sin(dLat / 2) ** 2 + Math.cos((lat1 * Math.PI) / 180) * Math.cos((lat2 * Math.PI) / 180) * Math.sin(dLon / 2) ** 2;
  return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
}

À éviter

  • Rendre côté serveur les composants cartographiques – toujours charger avec ssr: false ou "use client"
  • Rendre 1000+ marqueurs sans regroupement – tue les performances ; utiliser supercluster
  • Coordonnées codées en dur – géocoder les adresses au moment de la construction ou à la demande
  • Ignorer le refus d'autorisation de géolocalisation – toujours fournir un repli (saisie manuelle de l'adresse)

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

cmdk integration, Cmd+K trigger, fuzzy search, grouped actions, keyboard navigation, and dynamic action registration.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Threaded comments, @mentions, reactions, moderation queue, optimistic UI, and cursor pagination.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Drizzle schema definition, push vs migrate, type-safe queries, relations, transactions, and prepared statements.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

Skills associés