geocoder-php/yandex-provider
Yandex provider for the Geocoder PHP library. Adds Yandex Geocoder and reverse geocoding support, returning normalized address and coordinate data via the standard Geocoder interfaces. Suitable for Laravel or standalone PHP projects.
Installation
composer require geocoder-php/yandex-provider
Ensure geocoder-php/geocoder is also installed (core package).
First Use Case: Reverse Geocoding
use Geocoder\Geocoder;
use Geocoder\Provider\Yandex\YandexProvider;
$geocoder = new Geocoder();
$geocoder->registerProvider(new YandexProvider('YOUR_API_KEY'));
$result = $geocoder->reverse(55.755826, 37.617698); // Moscow coordinates
$address = $result->getFirstResult()->getFormatedAddress();
Where to Look First
YandexProvider class source: Link (check for undocumented features).Forward Geocoding (Address → Coordinates)
$result = $geocoder->geocodeQuery('Красная площадь, Москва');
$coordinates = $result->getFirstResult()->getCoordinates();
Batch Processing
$geocoder->batchGeocodeQuery(['address1', 'address2', 'address3']);
Customizing Requests
$provider = new YandexProvider('API_KEY', [
'language' => 'ru_RU', // Override default language
'results' => 3, // Request up to 3 results
]);
Integration with Laravel
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(Geocoder::class, function () {
$geocoder = new Geocoder();
$geocoder->registerProvider(new YandexProvider(config('services.yandex.key')));
return $geocoder;
});
}
// config/services.php
'yandex' => [
'key' => env('YANDEX_GEOCODE_API_KEY'),
'options' => [
'language' => 'en_US',
],
],
Caching Responses Use Laravel’s cache or Geocoder’s built-in caching:
$geocoder->registerProvider(new YandexProvider('API_KEY', [], new CacheAdapter()));
API Key Restrictions
Character Encoding Issues
language and address parameters use UTF-8 encoding.
$result = $geocoder->geocodeQuery(utf8_encode('Манежная площадь, 1'));
No Direct HTTP Client Control
YandexProvider to inject a custom client:
$client = new \GuzzleHttp\Client(['timeout' => 30]);
$provider = new YandexProvider('API_KEY', [], null, $client);
Result Parsing Quirks
metaData fields).$rawResponse = $result->getProviderResponse();
Paid Plan Limitations
Enable Debugging
$provider->setDebug(true); // Logs raw requests/responses
Handle Exceptions
try {
$result = $geocoder->geocodeQuery('invalid address');
} catch (\Geocoder\Exception\UnsupportedProviderException $e) {
// Provider-specific error
} catch (\Geocoder\Exception\NoResultException $e) {
// No results found
}
Fallback Providers Register multiple providers for redundancy:
$geocoder->registerProvider(new YandexProvider('API_KEY'));
$geocoder->registerProvider(new GoogleProvider('GOOGLE_KEY'));
Custom Response Processing
Extend YandexProvider to modify how responses are parsed:
class CustomYandexProvider extends YandexProvider {
protected function parseResponse($response) {
// Override logic here
return parent::parseResponse($response);
}
}
Add Custom Metadata
Yandex returns rich metadata (e.g., boundedBy, kind). Access it via:
$result->getFirstResult()->getMetaData();
Geofencing
Combine with geocoder-php/geocoder’s filterByCircle for location-based queries:
$results = $geocoder->geocodeQuery('park');
$filtered = $geocoder->filterByCircle($results, 55.755826, 37.617698, 1000); // 1km radius
How can I help you explore Laravel packages today?