# Cartes (maps)

> Module maps : Carte avec marqueurs (react-native-maps, repli web), position de l'utilisateur (expo-location), ouverture dans Plans/Maps.

Carte avec marqueurs (react-native-maps, repli web), position de l'utilisateur (expo-location), ouverture dans Plans/Maps.

:::note[Page générée]
Générée depuis `modules/maps/README.md`, `module.json`, `config.ts`, `index.ts` à chaque build du site : modifier la source, pas cette page.
:::

## Fiche technique

| | |
|---|---|
| Paquet | `@daroms/module-maps` |
| Activer | `bun daroms module add maps` |
| Requiert | aucun module |
| Dépendances natives | `react-native-maps`, `expo-location` |
| Routes ajoutées | aucune |
| Onglets | aucun |
| Migrations | aucune |
| Edge functions | aucune |
| Variables d'environnement | `GOOGLE_MAPS_ANDROID_API_KEY` |
| Gate de navigation | non |
| Section de réglages | non |

## Mise en place et usage

Carte avec marqueurs (react-native-maps : Apple Plans sur iOS, Google Maps sur Android ; fonctionne dans Expo Go), position de l'utilisateur (expo-location), distances. Sur le web (`daroms shot`), une zone de repli remplace la carte.

- Activer : `bun daroms module add maps`.
- Configuration (`modules.maps`) : `center` (repli, défaut Paris), `span` (zoom, 0.05), `locationPermission` (texte iOS, défaut selon `defaultLocale`).
- Écran : `<Map label={t('places.map')} markers={places.map((p) => ({ id: p.id, latitude: p.lat, longitude: p.lng, title: p.name }))} onMarkerPress={(m) => router.push(\`/place/${m.id}\`)} ratio={4 / 3} />` (`flex={1}` pour une carte plein écran).
- Position : `const here = useCurrentLocation({ enabled: nearby })` (permission demandée à l'usage ; refus = `AppError forbidden` pour `ErrorState`) ; `sortByDistance(places, here.data)`, `formatDistance(distanceKm(a, b), locale)`.
- Itinéraire : `openInMaps({ latitude, longitude }, nom)`.
- Colonnes : `lat:float, lng:float` dans `g table`.
- Build Android : clé Google Maps (API « Maps SDK for Android ») dans `GOOGLE_MAPS_ANDROID_API_KEY` (`.env` en local, `eas env:create` pour EAS), sinon la carte est vide hors Expo Go. iOS : rien à faire (Apple Plans).

## Configuration

Dans `app.manifest.ts > modules['maps']`, validée par `modules/maps/config.ts` au démarrage.

| Clé | Schéma zod | Rôle |
|---|---|---|
| `center` | `point.default({ latitude: 48.8566, longitude: 2.3522 })` | Centre par défaut quand il n'y a ni marqueur ni position (Paris). |
| `span` | `z.number().positive().default(0.05)` | Zoom par défaut : degrés de latitude visibles (0.05 = un quartier, 0.5 = une ville). |
| `locationPermission` | `z.string().optional()` | Texte iOS de la permission de localisation (plugin) : défaut selon la langue par défaut de l'app. |

Valeurs écrites par `module add` :

```json
{
  "span": 0.05
}
```

## Exports

```ts
import { distanceKm, formatDistance, regionFor } from '@daroms/module-maps'
```

- Valeurs : `distanceKm`, `formatDistance`, `regionFor`, `sortByDistance`, `getCurrentLocation`, `openInMaps`, `useCurrentLocation`, `Map`

- Types : `LatLng`, `Region`, `MapMarker`, `MapProps`

---

Page HTML : https://daromsartof.github.io/daroms-speedapp/reference/modules/maps/
Index de la documentation : https://daromsartof.github.io/daroms-speedapp/llms.txt
