geocoder-php/nominatim-provider
Nominatim provider for Geocoder PHP. Adds OpenStreetMap Nominatim geocoding and reverse geocoding support, converting addresses and coordinates to structured results, with configurable endpoints and HTTP client integration for Laravel/PHP apps.
nominatim-provider package is a specialized geocoding service integration for Laravel/PHP, enabling reverse geocoding (coordinates → human-readable addresses) and forward geocoding (address → coordinates) via OpenStreetMap’s Nominatim API.
geocoder-php/geocoder package, ensuring seamless integration with Laravel’s Service Container and configurable providers.geocoder-php/geocoder (≥v3.0) as a wrapper. No direct Laravel dependencies, but leverages Laravel’s config/cache for provider configuration.guzzlehttp/guzzle (or Symfony’s HttpClient) under the hood. Laravel’s built-in Http client can replace this if preferred.config/services.php or via the Geocoder facade.'geocoder' => [
'providers' => [
'nominatim' => [
'key' => env('NOMINATIM_API_KEY', null), // Optional; Nominatim is free but rate-limited
'host' => env('NOMINATIM_HOST', 'https://nominatim.openstreetmap.org'),
'scheme' => 'https',
],
],
];
Address objects (e.g., street, city, postcode) via Geocoder’s unified API.| Risk | Mitigation |
|---|---|
| Rate Limiting | Implement exponential backoff and local caching (Redis/Memcached). |
| API Deprecation | Nominatim’s API is stable but may change. Monitor OSM’s announcements. |
| Accuracy Issues | Nominatim is community-driven; test edge cases (e.g., rural areas, non-Latin scripts). |
| Dependency Bloat | Only pull in geocoder-php/geocoder if needed; avoid transitive dependencies. |
| Compliance | Nominatim’s usage policy prohibits commercial bulk scraping. Ensure compliance. |
geocoder-php/geocoder with a different provider).config/services.php or a dedicated geocoder.php.Geocoder\GeocoderFacade for concise syntax:
$address = Geocoder::geocode('1600 Amphitheatre Parkway, Mountain View');
geocoder-php/geocoder, but loses Laravel’s conveniences (e.g., config caching).composer require geocoder-php/geocoder geocoder-php/nominatim-provider
php artisan vendor:publish --provider="Geocoder\GeocoderServiceProvider"
.env with NOMINATIM_HOST (if custom endpoint).geocoder.log).composer.json).geocoder-php/geocoder ≥3.0.HttpClient or Laravel’s Http.geocoder-php/geocoder for breaking changes (e.g., API deprecations).try {
$result = Geocoder::geocode($query);
} catch (\Geocoder\Exception\UnsupportedProviderException $e) {
Log::error("Nominatim provider failed: " . $e->getMessage());
}
X-RateLimit-* headers in responses.connect_timeout in Guzzle config.tinker to test geocoding interactively:
php artisan tinker
>>> Geocoder::geocode('Paris');
'geocoder' => [
'cache' => [
'driver' => 'redis',
'host' => env('REDIS_HOST'),
],
],
geocoder-php/geocoder with a LocalProvider).| Failure | Impact | Mitigation |
|---|---|---|
| Nominatim Outage | Geocoding fails for all users. | Fallback to a local cache or secondary provider (e.g., MapQuest). |
| Rate Limit Exceeded | 429 errors; |
How can I help you explore Laravel packages today?