up dashboard osmose de ville
This commit is contained in:
parent
1535cf8ee3
commit
684bf1da66
3 changed files with 108 additions and 27 deletions
|
@ -2410,6 +2410,9 @@ final class AdminController extends AbstractController
|
|||
// Récupérer tous les thèmes disponibles
|
||||
$themes = $this->followUpService->getFollowUpThemes();
|
||||
|
||||
// Liste complète des items Osmose à utiliser
|
||||
$allOsmoseItems = '7051%2C7070%2C7100%2C7150%2C7160%2C7170%2C7190%2C7220%2C7240%2C7250%2C8010%2C8020%2C8021%2C8030%2C8031%2C8050%2C8051%2C8090%2C8091%2C8101%2C8110%2C8121%2C8150%2C8151%2C8180%2C8191%2C8201%2C8211%2C8221%2C8230%2C8240';
|
||||
|
||||
// Récupérer les problèmes Osmose pour cette ville
|
||||
$osmoseIssues = $this->getOsmoseIssuesForCity($city, $theme);
|
||||
|
||||
|
@ -2485,6 +2488,24 @@ final class AdminController extends AbstractController
|
|||
// Ajouter le libellé pour "Autres"
|
||||
$themes['other'] = 'Autres problèmes';
|
||||
|
||||
// Calculer la bounding box pour la ville
|
||||
$bbox = $this->calculateBoundingBox($city->getLat(), $city->getLon(), 5);
|
||||
|
||||
// Récupérer les items Osmose correspondant aux thèmes si un thème spécifique est sélectionné
|
||||
$itemsParam = $theme !== 'all' ?
|
||||
(!empty($this->getOsmoseItemIdsForTheme($theme)) ? implode('%2C', $this->getOsmoseItemIdsForTheme($theme)) : $allOsmoseItems) :
|
||||
$allOsmoseItems;
|
||||
|
||||
// Construire l'URL de l'API Osmose pour le GeoJSON
|
||||
$jsonOsmoseUrl = sprintf(
|
||||
'https://osmose.openstreetmap.fr/api/0.3/issues.geojson?zoom=14&item=%s&level=1%%2C2%%2C3&class=&source=&limit=500&bbox=%f%%2C%f%%2C%f%%2C%f',
|
||||
$itemsParam,
|
||||
$bbox['min_lon'],
|
||||
$bbox['min_lat'],
|
||||
$bbox['max_lon'],
|
||||
$bbox['max_lat']
|
||||
);
|
||||
|
||||
return $this->render('admin/osmose_issues_map.html.twig', [
|
||||
'city' => $city,
|
||||
'theme' => $theme,
|
||||
|
@ -2492,7 +2513,18 @@ final class AdminController extends AbstractController
|
|||
'osmoseIssues' => $osmoseIssues,
|
||||
'issuesByTheme' => $issuesByTheme,
|
||||
'issuesByLevel' => $issuesByLevel,
|
||||
'osmoseApiUrl' => 'https://osmose.openstreetmap.fr/fr/map/#zoom=14&lat=' . $city->getLat() . '&lon=' . $city->getLon()
|
||||
|
||||
'mapbox_token' => $_ENV['MAPBOX_TOKEN'] ?? null,
|
||||
'maptiler_token' => $_ENV['MAPTILER_TOKEN'] ?? null,
|
||||
'jsonOsmose' => $jsonOsmoseUrl,
|
||||
'osmoseApiUrl' => sprintf(
|
||||
'https://osmose.openstreetmap.fr/fr/map/#zoom=14&lat=%s&lon=%s&item=%s&level=1%%2C2%%2C3&loc=14/%s/%s',
|
||||
$city->getLat(),
|
||||
$city->getLon(),
|
||||
$allOsmoseItems,
|
||||
$city->getLat(),
|
||||
$city->getLon()
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -2531,36 +2563,62 @@ final class AdminController extends AbstractController
|
|||
|
||||
try {
|
||||
// Appeler l'API Osmose
|
||||
$response = file_get_contents($osmoseApiUrl);
|
||||
$context = stream_context_create([
|
||||
'http' => [
|
||||
'timeout' => 30, // Augmenter le timeout à 30 secondes
|
||||
'user_agent' => 'OSM-Commerces/1.0'
|
||||
]
|
||||
]);
|
||||
|
||||
$response = file_get_contents($osmoseApiUrl, false, $context);
|
||||
if ($response === false) {
|
||||
throw new \Exception('Échec de la récupération des données Osmose');
|
||||
}
|
||||
|
||||
$data = json_decode($response, true);
|
||||
if (isset($data['issues'])) {
|
||||
if (isset($data['issues']) && is_array($data['issues'])) {
|
||||
foreach ($data['issues'] as $issue) {
|
||||
// Vérifier si l'issue a les propriétés nécessaires
|
||||
if (!isset($issue['lat']) || !isset($issue['lon'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Vérifier si l'issue est dans les limites de la ville (approximativement)
|
||||
if ($this->isPointInCity($issue['lat'], $issue['lon'], $lat, $lon, 5)) {
|
||||
// Utiliser un rayon plus grand (10km) pour inclure plus d'issues
|
||||
if ($this->isPointInCity($issue['lat'], $issue['lon'], $lat, $lon, 10)) {
|
||||
$issues[] = [
|
||||
'id' => $issue['id'],
|
||||
'id' => $issue['id'] ?? '',
|
||||
'title' => $issue['title'] ?? 'Problème sans titre',
|
||||
'subtitle' => $issue['subtitle'] ?? '',
|
||||
'lat' => $issue['lat'],
|
||||
'lon' => $issue['lon'],
|
||||
'item' => $issue['item'],
|
||||
'class' => $issue['class'],
|
||||
'item' => $issue['item'] ?? '',
|
||||
'class' => $issue['class'] ?? '',
|
||||
'level' => $issue['level'] ?? 2,
|
||||
'update_timestamp' => $issue['update_timestamp'] ?? null,
|
||||
'url' => sprintf('https://osmose.openstreetmap.fr/fr/issue/%s', $issue['uuid'])
|
||||
'url' => isset($issue['uuid']) ? sprintf('https://osmose.openstreetmap.fr/fr/issue/%s', $issue['uuid']) : '#'
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Si aucune issue n'a été trouvée, ajouter un message de log
|
||||
if (empty($issues)) {
|
||||
$this->actionLogger->log('osmose_no_issues', [
|
||||
'insee_code' => $city->getZone(),
|
||||
'theme' => $theme,
|
||||
'url' => $osmoseApiUrl
|
||||
]);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->actionLogger->log('error_osmose_api', [
|
||||
'insee_code' => $city->getZone(),
|
||||
'error' => $e->getMessage()
|
||||
'error' => $e->getMessage(),
|
||||
'url' => $osmoseApiUrl
|
||||
]);
|
||||
|
||||
// Ajouter un message flash pour informer l'utilisateur
|
||||
$this->addFlash('warning', 'Impossible de récupérer les problèmes Osmose : ' . $e->getMessage());
|
||||
}
|
||||
|
||||
return $issues;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue