A simple interface to OSM Nominatim.
See Nominatim documentation for info on the service.
Install the package through composer:
composer require jbohme/nominatim-laravel
You must publish a project configuration with:
php artisan vendor:publish
php artisan config:cache
After that the file config/nominatim.php will be ready.
If you are going to use a custom url, the NOMINATIM_URL parameter must be included in the .env
Create a new instance of Nominatim.
use NominatimLaravel\Content\Nominatim;
$url = "http://nominatim.openstreetmap.org/";
$nominatim = new Nominatim($url);
Searching by query :
$search = $nominatim->newSearch();
$search->query('HelloWorld');
$nominatim->find($search);
Or break it down by address :
$search = $nominatim->newSearch()
->country('France')
->city('Bayonne')
->postalCode('64100')
->polygon('geojson') //or 'kml', 'svg' and 'text'
->addressDetails();
$result = $nominatim->find($search);
Or do a reverse query :
$reverse = $nominatim->newReverse()
->latlon(43.4843941, -1.4960842);
$result = $nominatim->find($reverse);
Or do a lookup query :
$lookup = $nominatim->newLookup()
->format('xml')
->osmIds('R146656,W104393803,N240109189')
->nameDetails(true);
$result = $nominatim->find($lookup);
Or do a details query (by place_id):
$details = $nominatim->newDetails()
->placeId(1234)
->polygon('geojson');
$result = $nominatim->find($details);
Or do a details query (by osm type and osm id):
$details = $nominatim->newDetails()
->osmType('R')
->osmId(1234)
->polygon('geojson');
$result = $nominatim->find($details);
By default, the output format of the request is json and the wrapper return a array of results. It can be also xml, but the wrapper return a object SimpleXMLElement
There are two possibilities :
- By
Nominatim
instance, for all request :
$nominatim = new Nominatim($url, [
'verify' => false
]);
- By
find
method, for a request :
$result = $nominatim->find($lookup, [
'verify' => false
]);
You can inject your own HTTP client with your specific configuration. For instance, you can edit user-agent and timeout for all your requests
<?php
use maxh\Nominatim\Nominatim;
use GuzzleHttp\Client;
$url = "http://nominatim.openstreetmap.org/";
$defaultHeader = [
'verify' => false,
'headers', array('User-Agent' => 'api_client')
];
$client = new Client([
'base_uri' => $url,
'timeout' => 30,
'connection_timeout' => 5,
]);
$nominatim = new Nominatim($url, $defaultHeader, $client);
This projet was inpired by the maxhelias/php-nominatim. The code has been adapted to the Laravel standard for future implementations.
If you use the service : http://nominatim.openstreetmap.org/, please see Nominatim usage policy.