mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-09 17:02:46 +02:00
add bubble chart, fix dashboard perf
This commit is contained in:
parent
ca00f8c0be
commit
ad4170db14
8 changed files with 335 additions and 248 deletions
|
@ -162,16 +162,33 @@ out meta;';
|
|||
|
||||
public function labourer(string $zone): array
|
||||
{
|
||||
$query = $this->get_query_places($zone);
|
||||
$url = 'https://overpass-api.de/api/interpreter?data=' . urlencode($query);
|
||||
|
||||
try {
|
||||
$query = $this->get_query_places($zone);
|
||||
$response = $this->client->request('POST', $this->overpassApiUrl, [
|
||||
'body' => ['data' => $query]
|
||||
$response = $this->client->request('GET', $url, [
|
||||
'timeout' => 90, // Augmenter le timeout pour les zones très denses
|
||||
]);
|
||||
|
||||
if ($response->getStatusCode() !== 200) {
|
||||
throw new \Exception('L\'API Overpass a retourné un code de statut non-200 : ' . $response->getStatusCode());
|
||||
}
|
||||
|
||||
$data = json_decode($response->getContent(), true);
|
||||
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
// Tenter de récupérer le corps de la réponse brute en cas d'erreur JSON pour le débogage
|
||||
$rawResponse = $response->getContent(false); // ne pas lancer d'exception si la réponse n'est pas décodable
|
||||
throw new \Exception('Réponse JSON invalide depuis l\'API Overpass. Erreur: ' . json_last_error_msg() . '. Réponse brute : ' . substr($rawResponse, 0, 500));
|
||||
}
|
||||
|
||||
$places = [];
|
||||
if (isset($data['elements'])) {
|
||||
if (count($data['elements']) === 0) {
|
||||
// Ce n'est pas une erreur, juste aucun lieu trouvé. On retourne un tableau vide.
|
||||
return [];
|
||||
}
|
||||
|
||||
foreach ($data['elements'] as $element) {
|
||||
if (isset($element['tags'])) {
|
||||
$places[] = [
|
||||
|
@ -198,8 +215,13 @@ out meta;';
|
|||
gc_collect_cycles();
|
||||
|
||||
return $places;
|
||||
|
||||
} catch (\Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface $e) {
|
||||
// Gérer spécifiquement les erreurs de transport (timeout, problème de connexion)
|
||||
throw new \Exception('Erreur de communication avec l\'API Overpass (le service est peut-être indisponible ou la requête a expiré) : ' . $e->getMessage(), 0, $e);
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception("Erreur lors de la requête Overpass : " . $e->getMessage());
|
||||
// Rattraper et relancer les autres exceptions (y compris celles que nous avons définies)
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue