OpenRouteService   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 17
c 1
b 0
f 0
dl 0
loc 65
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getName() 0 3 1
A geocodeQuery() 0 7 1
A reverseQuery() 0 7 1
A __construct() 0 17 3
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Geocoder package.
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @license    MIT License
11
 */
12
13
namespace Geocoder\Provider\OpenRouteService;
14
15
use Geocoder\Collection;
16
use Geocoder\Exception\InvalidCredentials;
17
use Geocoder\Query\GeocodeQuery;
18
use Geocoder\Query\ReverseQuery;
19
use Geocoder\Provider\Pelias\Pelias;
20
use Geocoder\Provider\Provider;
21
use Http\Client\HttpClient;
22
23
final class OpenRouteService extends Pelias implements Provider
24
{
25
    const API_URL = 'https://api.openrouteservice.org/geocode';
26
27
    const API_VERSION = 1;
28
29
    /**
30
     * @var string
31
     */
32
    private $apiKey;
33
34
    /**
35
     * @param HttpClient $client an HTTP adapter
36
     * @param string     $apiKey an API key
37
     */
38
    public function __construct(HttpClient $client, string $apiKey)
39
    {
40
        if (empty($apiKey)) {
41
            throw new InvalidCredentials('No API key provided.');
42
        }
43
44
        $this->apiKey = $apiKey;
45
        parent::__construct($client, self::API_URL, self::API_VERSION);
46
47
        /*
48
         * Openrouteservice does not use /v1 in first version, but plan to add
49
         *  /v2 in next version.
50
         *
51
         * @see https://ask.openrouteservice.org/t/pelias-version-in-api-url/1021
52
         */
53
        if (self::API_VERSION === 1) {
0 ignored issues
show
introduced by
The condition self::API_VERSION === 1 is always true.
Loading history...
54
            $this->root = self::API_URL;
55
        }
56
    }
57
58
    /**
59
     * {@inheritdoc}
60
     */
61
    public function geocodeQuery(GeocodeQuery $query): Collection
62
    {
63
        $url = $this->getGeocodeQueryUrl($query, [
64
            'api_key' => $this->apiKey,
65
        ]);
66
67
        return $this->executeQuery($url);
68
    }
69
70
    /**
71
     * {@inheritdoc}
72
     */
73
    public function reverseQuery(ReverseQuery $query): Collection
74
    {
75
        $url = $this->getReverseQueryUrl($query, [
76
            'api_key' => $this->apiKey,
77
        ]);
78
79
        return $this->executeQuery($url);
80
    }
81
82
    /**
83
     * {@inheritdoc}
84
     */
85
    public function getName(): string
86
    {
87
        return 'openrouteservice';
88
    }
89
}
90