Geocoder\Provider\Mapzen::executeQuery PHP Méthode

executeQuery() private méthode

private executeQuery ( $query ) : Geocoder\Model\AddressCollection
$query
Résultat Geocoder\Model\AddressCollection
    private function executeQuery($query)
    {
        $request = $this->getMessageFactory()->createRequest('GET', $query);
        $content = (string) $this->getHttpClient()->sendRequest($request)->getBody();
        if (empty($content)) {
            throw new NoResult(sprintf('Could not execute query "%s".', $query));
        }
        $json = json_decode($content, true);
        // See https://mapzen.com/documentation/search/api-keys-rate-limits/
        if (isset($json['meta'])) {
            switch ($json['meta']['status_code']) {
                case 403:
                    throw new InvalidCredentials('Invalid or missing api key.');
                case 429:
                    throw new QuotaExceeded('Valid request but quota exceeded.');
            }
        }
        if (!isset($json['type']) || $json['type'] !== 'FeatureCollection' || !isset($json['features']) || count($json['features']) === 0) {
            throw new NoResult(sprintf('Could not find results for query "%s".', $query));
        }
        $locations = $json['features'];
        if (empty($locations)) {
            throw new NoResult(sprintf('Could not find results for query "%s".', $query));
        }
        $results = [];
        foreach ($locations as $location) {
            $bounds = [];
            if (isset($location['bbox'])) {
                $bounds = ['south' => $location['bbox'][3], 'west' => $location['bbox'][2], 'north' => $location['bbox'][1], 'east' => $location['bbox'][0]];
            }
            $props = $location['properties'];
            $adminLevels = [];
            foreach (['region', 'locality', 'macroregion', 'country'] as $i => $component) {
                if (isset($props[$component])) {
                    $adminLevels[] = ['name' => $props[$component], 'level' => $i + 1];
                }
            }
            $results[] = array_merge($this->getDefaults(), array('latitude' => $location['geometry']['coordinates'][1], 'longitude' => $location['geometry']['coordinates'][0], 'bounds' => $bounds ?: [], 'streetNumber' => isset($props['housenumber']) ? $props['housenumber'] : null, 'streetName' => isset($props['street']) ? $props['street'] : null, 'subLocality' => isset($props['neighbourhood']) ? $props['neighbourhood'] : null, 'locality' => isset($props['locality']) ? $props['locality'] : null, 'postalCode' => isset($props['postalcode']) ? $props['postalcode'] : null, 'adminLevels' => $adminLevels, 'country' => isset($props['country']) ? $props['country'] : null, 'countryCode' => isset($props['country_a']) ? strtoupper($props['country_a']) : null));
        }
        return $this->returnResults($results);
    }