Files
mesreleves-php/app/Http/Controllers/CarteController.php
T
yann64 a1860e9462 Page carte interactive des relevés (Leaflet + OpenStreetMap)
- CarteController : index() + data() (JSON) — requête lieux géolocalisés
  ayant des sources avec relevés, agrégats par lieu
- Lieu model : relations sources() et releves() (hasManyThrough)
- Vue carte/index.blade.php : carte Leaflet pleine hauteur, marqueurs
  colorés par nombre de sources (taille/couleur proportionnels),
  popup par lieu avec liste des sources, statuts, années et lien recherche
- Tuiles OpenStreetMap inversées en mode sombre
- Route GET /carte + GET /carte/data
- Lien "Carte" dans la navigation desktop et mobile
- @stack('head') dans le layout pour injecter Leaflet uniquement sur la page carte

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 21:02:28 +02:00

57 lines
2.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers;
use App\Models\Lieu;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class CarteController extends Controller
{
public function index(): View
{
return view('carte.index');
}
public function data(Request $request): JsonResponse
{
$lieux = Lieu::whereNotNull('latitude')
->whereNotNull('longitude')
->whereHas('sources.releves')
->with([
'sources' => function ($q) {
$q->withCount('releves')
->select('id', 'nom', 'lieu_id', 'status', 'annee_debut', 'annee_fin')
->orderBy('nom');
},
])
->get()
->map(function (Lieu $lieu) {
$relevesTotal = $lieu->sources->sum('releves_count');
return [
'id' => $lieu->id,
'nom' => $lieu->nom_long ?? $lieu->nom,
'lat' => (float) $lieu->latitude,
'lng' => (float) $lieu->longitude,
'sources_count' => $lieu->sources->count(),
'releves_count' => $relevesTotal,
'sources' => $lieu->sources->map(fn ($s) => [
'id' => $s->id,
'nom' => $s->nom,
'releves_count' => $s->releves_count,
'status' => $s->status->label(),
'status_value' => $s->status->value,
'annees' => $s->annee_debut
? ($s->annee_debut === $s->annee_fin || ! $s->annee_fin
? (string) $s->annee_debut
: "{$s->annee_debut}{$s->annee_fin}")
: null,
]),
];
});
return response()->json($lieux);
}
}