parameterBag = $parameterBag; } public function callCitiesApi($method, $url, $data = false) { $url = 'https://geo.api.gouv.fr/' . $url; $curl = curl_init(); switch ($method) { case "POST": curl_setopt($curl, CURLOPT_POST, 1); if ($data) { curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } break; case "PUT": curl_setopt($curl, CURLOPT_PUT, 1); break; default: if ($data) { $url = sprintf("%s?%s", $url, http_build_query($data)); } } // Optional Authentication: curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, "username:password"); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); curl_close($curl); return $result; } public function getGeocoderProvider() { $provider = false; $symfonyClient = new HttplugClient(); $configGeocoderProvider = $this->parameterBag->get('geocoder.provider'); /* API du gouvernement */ if ($configGeocoderProvider == 'addok') { $provider = new Addok($symfonyClient, 'https://api-adresse.data.gouv.fr'); } /* Google Maps */ elseif ($configGeocoderProvider == 'googlemaps') { $provider = new GoogleMaps($symfonyClient, null, $this->parameterBag->get('geocoder.api_key')); } /* Nominatim : OpenStreetMap */ elseif ($configGeocoderProvider == 'nominatim') { $provider = Nominatim::withOpenStreetMapServer( $symfonyClient, 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion' ); } if (!$provider) { throw new \ErrorException('Aucun provider (geocoding) défini'); } return $provider; } public function callAddressApi($query) { $provider = $this->getGeocoderProvider() ;; $query = GeocodeQuery::create($query)->withData('type', 'housenumber'); $results = $provider->geocodeQuery($query); $resultsToReturn = array(); foreach($results as $result) { if ($result->getStreetNumber() && strlen($result->getStreetNumber()) > 0) { $resultsToReturn[] = $result; } } return $resultsToReturn; } public function callReverseAddressApi($latitude, $longitude) { $provider = $this->getGeocoderProvider() ;; $query = ReverseQuery::create(new Coordinates($latitude, $longitude)); $results = $provider->reverseQuery($query); return $results->all() ; } public function getZipByCity($city, $code = null) { $zip = null; $paramsSearch = [ 'nom' => $city, 'fields' => 'nom,codesPostaux' ]; if ($code != null && $code != 0) { $paramsSearch['code'] = $code; } $returnCitiesSearchZip = json_decode($this->callCitiesApi('get', 'communes', $paramsSearch)); if ($returnCitiesSearchZip) { foreach ($returnCitiesSearchZip as $citySearchZip) { if (strtolower(trim($city)) == strtolower(trim($citySearchZip->nom))) { $zip = $citySearchZip->codesPostaux[0]; } } } return $zip; } }