From 4d66689a74fd0a590e7fefd0560a2630a4fd0cc5 Mon Sep 17 00:00:00 2001 From: bisleadity <177923681+bisleadity@users.noreply.github.com> Date: Tue, 18 Mar 2025 15:49:11 +0100 Subject: [PATCH 1/3] [GraphHopper] Add provider parameter Graphhopper geocoding supports different providers. Hereby the option is given to use those providers. --- src/Provider/GraphHopper/CHANGELOG.md | 6 ++++ src/Provider/GraphHopper/GraphHopper.php | 5 +++ .../GraphHopper/Tests/GraphHopperTest.php | 31 +++++++++++++++++++ 3 files changed, 42 insertions(+) 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'])) { From 320b5d783d1cda50cc6b7434d3bb4e24adfe45a8 Mon Sep 17 00:00:00 2001 From: bisleadity <177923681+bisleadity@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:13:08 +0100 Subject: [PATCH 2/3] [GraphHopper] Add GraphHopperProvider enum for provider options of GraphHopper geocoding api Graphhopper geocoding supports different providers. Hereby the option is given to use only available providers. [GraphHopper] Add GraphHopperProviders enum for provider options of GraphHopper geocoding api Graphhopper geocoding supports different providers. Hereby the option is given to use only available providers. --- src/Provider/GraphHopper/GraphHopper.php | 2 +- .../GraphHopper/GraphHopperProvider.php | 14 +++++++++ .../GraphHopper/Tests/GraphHopperTest.php | 29 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/Provider/GraphHopper/GraphHopperProvider.php diff --git a/src/Provider/GraphHopper/GraphHopper.php b/src/Provider/GraphHopper/GraphHopper.php index fc78d093c..d9933c4c7 100644 --- a/src/Provider/GraphHopper/GraphHopper.php +++ b/src/Provider/GraphHopper/GraphHopper.php @@ -75,7 +75,7 @@ public function geocodeQuery(GeocodeQuery $query): Collection } $provider = $query->getData('provider'); - if (is_string($provider) && '' !== $provider) { + if (is_string($provider) && GraphHopperProvider::tryFrom($provider)) { $url .= sprintf('&provider=%s', urlencode($provider)); } diff --git a/src/Provider/GraphHopper/GraphHopperProvider.php b/src/Provider/GraphHopper/GraphHopperProvider.php new file mode 100644 index 000000000..0ff07a637 --- /dev/null +++ b/src/Provider/GraphHopper/GraphHopperProvider.php @@ -0,0 +1,14 @@ +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', 'invalidProvider'); + + 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', + $uri + ); + } + public function testReverseWithRealCoordinates(): void { if (!isset($_SERVER['GRAPHHOPPER_API_KEY'])) { From 676a401f5544405208a816ff3dba16529969489a Mon Sep 17 00:00:00 2001 From: bisleadity <177923681+bisleadity@users.noreply.github.com> Date: Wed, 2 Apr 2025 13:19:06 +0200 Subject: [PATCH 3/3] Revert "[GraphHopper] Add GraphHopperProvider enum for provider options of GraphHopper geocoding api" This reverts commit 320b5d783d1cda50cc6b7434d3bb4e24adfe45a8. --- src/Provider/GraphHopper/GraphHopper.php | 2 +- .../GraphHopper/GraphHopperProvider.php | 14 --------- .../GraphHopper/Tests/GraphHopperTest.php | 29 ------------------- 3 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 src/Provider/GraphHopper/GraphHopperProvider.php diff --git a/src/Provider/GraphHopper/GraphHopper.php b/src/Provider/GraphHopper/GraphHopper.php index d9933c4c7..fc78d093c 100644 --- a/src/Provider/GraphHopper/GraphHopper.php +++ b/src/Provider/GraphHopper/GraphHopper.php @@ -75,7 +75,7 @@ public function geocodeQuery(GeocodeQuery $query): Collection } $provider = $query->getData('provider'); - if (is_string($provider) && GraphHopperProvider::tryFrom($provider)) { + if (is_string($provider) && '' !== $provider) { $url .= sprintf('&provider=%s', urlencode($provider)); } diff --git a/src/Provider/GraphHopper/GraphHopperProvider.php b/src/Provider/GraphHopper/GraphHopperProvider.php deleted file mode 100644 index 0ff07a637..000000000 --- a/src/Provider/GraphHopper/GraphHopperProvider.php +++ /dev/null @@ -1,14 +0,0 @@ -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', 'invalidProvider'); - - 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', - $uri - ); - } - public function testReverseWithRealCoordinates(): void { if (!isset($_SERVER['GRAPHHOPPER_API_KEY'])) {