Typically, we used Drupal Cloud Console's Google Maps Geocoding API for Geolocation search, but a customer asked us to use OSM Nominatim instead.
I first had to find out, how to enable this provider in Drupal's Geocoder Module for Drupal 9 but finally found out (as documented on the Geodcoer providers page), that providers can be provided via composer:
composer require geocoder-php/nominatim-provider
(https://github.com/geocoder-php/nominatim-provider)
Afterwards you can select and enable them on the Geocoder admin page: admin/config/system/geocoder/geocoder-provider
Eventually you'll have to clear cache first!
As you can see on the screenshot, the module provides a link for a list of geocoder providers: https://packagist.org/providers/geocoder-php/provider-implementation
Nominatim works simply great! And without any costs for small projects!
php-http/client-implementation dependency
Should you encounter a composer error like this:
Problem 1
- geocoder-php/common-http[4.1.0, ..., 4.4.0] require php-http/client-implementation ^1.0 -> could not be found in any version, but the following packages provide it:
- symfony/http-client Provides powerful methods to fetch HTTP resources synchronously or asynchronously
- php-http/guzzle6-adapter Guzzle 6 HTTP Adapter
- symfony/symfony The Symfony PHP framework
- php-http/curl-client PSR-18 and HTTPlug Async client with cURL
- php-http/guzzle7-adapter Guzzle 7 HTTP Adapter
- kriswallsmith/buzz Lightweight HTTP client
- php-http/mock-client Mock HTTP client
- php-http/socket-client Socket client for PHP-HTTP
- php-http/guzzle5-adapter Guzzle 5 HTTP Adapter
- php-http/react-adapter React HTTP Adapter
- voku/httpful A Readable, Chainable, REST friendly, PHP HTTP Client
- php-http/buzz-adapter Buzz HTTP Adapter
- php-http/cakephp-adapter Cake adapter for PHP-HTTP
- code-tool/curl-client cURL client
- windwalker/http Windwalker Http package
- swisnl/php-http-fixture-client Fixture client for PHP-HTTP
- jorge-matricali/http-client A wrapper of libcurl that implements PSR-7 HTTP message interface.
- windwalker/framework The next generation PHP framework.
- juststeveking/http-slim A slim psr compliant http client to provide better interoperability.
- betalabs/guzzle6-adapter Guzzle 6 HTTP Adapter
... and 33 more.
Consider requiring one of these to satisfy the php-http/client-implementation requirement.
- geocoder-php/nominatim-provider[5.5.0, ..., 5.5.1] require geocoder-php/common-http ^4.1 -> satisfiable by geocoder-php/common-http[4.1.0, 4.2.0, 4.3.0, 4.4.0].
- Root composer.json requires geocoder-php/nominatim-provider ^5.5 -> satisfiable by geocoder-php/nominatim-provider[5.5.0, 5.5.1].
Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting
see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
- It's a private package and you forgot to add a custom repository to find it
You may have to install one of the suggested dependencies which matches your environment best. For Drupal 9 I chose the Symfony implementation:
composer require symfony/http-client