← Back
Editing: GeoService.php
<?php namespace App\Service; use App\Entity\Adresse; use Psr\Log\LoggerInterface; use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface; use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface; use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface; use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; final class GeoService { private const GOOGLE_MAPS_URL = 'https://maps.googleapis.com/maps/api/geocode/json'; private const GOOGLE_PLACES_URL = 'https://maps.googleapis.com/maps/api/place/textsearch/json'; public function __construct( private readonly HttpClientInterface $httpClient, private readonly string $googleApiKey, private readonly LoggerInterface $logger ) { } /** * @throws TransportExceptionInterface * @throws ClientExceptionInterface * @throws RedirectionExceptionInterface * @throws ServerExceptionInterface */ public function assignGeoFromAddress(Adresse $adresse): void { if (!$adresse->getLat() || !$adresse->getLng()) { $request = $this->httpClient->request('GET', self::GOOGLE_MAPS_URL, [ 'query' => [ 'address' => strval($adresse), 'key' => $this->googleApiKey, ], ]); try { $content = json_decode($request->getContent()); if (isset($content->results) && count($content->results) > 0) { $geometry = $content->results[0]->geometry; $adresse->setLat(str_replace(',', '.', $geometry->location->lat)); $adresse->setLng(str_replace(',', '.', $geometry->location->lng)); } } catch (\Exception $e) { $this->logger->error($e->getMessage()); } } } public function getAddressesFromQuery(string $query): \stdClass { $request = $this->httpClient->request('GET', self::GOOGLE_PLACES_URL, [ 'query' => [ 'query' => $query, 'key' => $this->googleApiKey, ], ]); $content = new \stdClass(); try { $content = json_decode($request->getContent()); } catch (\Exception $e) { $this->logger->error($e->getMessage()); } return $content; } public function getAddressesFromPosition(string $lat, string $lng): \stdClass { $request = $this->httpClient->request('GET', self::GOOGLE_MAPS_URL, [ 'query' => [ 'latlng' => sprintf('%s,%s', $lat, $lng), 'key' => $this->googleApiKey, ], ]); $content = new \stdClass(); try { $content = json_decode($request->getContent()); } catch (\Exception $e) { $this->logger->error($e->getMessage()); } return $content; } }
Save File
Cancel