diff --git a/src/Provider/GraphHopper/CHANGELOG.md b/src/Provider/GraphHopper/CHANGELOG.md index 976edfee7..ad8f12538 100644 --- a/src/Provider/GraphHopper/CHANGELOG.md +++ b/src/Provider/GraphHopper/CHANGELOG.md @@ -2,6 +2,12 @@ The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release. +## 0.6.0 + +### Added + +- Add provider support for graphhopper geocoding API + ## 0.5.0 ### Removed diff --git a/src/Provider/GraphHopper/GraphHopper.php b/src/Provider/GraphHopper/GraphHopper.php index 38120eafe..fc78d093c 100644 --- a/src/Provider/GraphHopper/GraphHopper.php +++ b/src/Provider/GraphHopper/GraphHopper.php @@ -74,6 +74,11 @@ public function geocodeQuery(GeocodeQuery $query): Collection $url .= sprintf('&bbox=%f,%f,%f,%f', $bounds->getWest(), $bounds->getSouth(), $bounds->getEast(), $bounds->getNorth()); } + $provider = $query->getData('provider'); + if (is_string($provider) && '' !== $provider) { + $url .= sprintf('&provider=%s', urlencode($provider)); + } + return $this->executeQuery($url); } diff --git a/src/Provider/GraphHopper/Tests/GraphHopperTest.php b/src/Provider/GraphHopper/Tests/GraphHopperTest.php index c3c5b5626..3b7256b1a 100644 --- a/src/Provider/GraphHopper/Tests/GraphHopperTest.php +++ b/src/Provider/GraphHopper/Tests/GraphHopperTest.php @@ -12,11 +12,13 @@ namespace Geocoder\Provider\GraphHopper\Tests; +use Geocoder\Exception\InvalidServerResponse; use Geocoder\IntegrationTest\BaseTestCase; use Geocoder\Model\Bounds; use Geocoder\Provider\GraphHopper\GraphHopper; use Geocoder\Query\GeocodeQuery; use Geocoder\Query\ReverseQuery; +use Psr\Http\Message\RequestInterface; /** * @author Gary Gale @@ -119,6 +121,35 @@ public function testGeocodeOutsideBounds(): void $this->assertCount(0, $results); } + public function testCorrectlyAppendsProvider(): void + { + $uri = ''; + + $provider = new GraphHopper( + $this->getMockedHttpClientCallback( + function (RequestInterface $request) use (&$uri) { + $uri = (string) $request->getUri(); + } + ), + 'api_key' + ); + + $query = GeocodeQuery::create('242 Acklam Road, London, United Kingdom') + ->withLocale('fr') + ->withData('provider', 'default'); + + try { + $provider->geocodeQuery($query); + } catch (InvalidServerResponse $e) { + } + + $this->assertEquals('https://graphhopper.com/api/1/geocode'. + '?q=242+Acklam+Road%2C+London%2C+United+Kingdom'. + '&key=api_key&locale=fr&limit=5&provider=default', + $uri + ); + } + public function testReverseWithRealCoordinates(): void { if (!isset($_SERVER['GRAPHHOPPER_API_KEY'])) {