ndrd / google-maps-lumen
Collection of Google Maps API Web Services for Laravel
Requires
- ext-curl: *
- ext-json: *
- alexpechkarev/geometry-library: ^1.0.2
- illuminate/config: ^8.0
- illuminate/support: ^8.0
- jbroadway/urlify: ^1.1
Requires (Dev)
- phpunit/phpunit: 4.7.*
README
Provides convenient way of setting up and making requests to Maps API from Laravel application. For services documentation, API key and Usage Limits visit Google Maps API Web Services and Maps API for Terms of Service License Restrictions.
Features
- Directions API
- Distance Matrix API
- Elevation API
- Geocoding API
- Geolocation API
- Roads API
- Time Zone API
- Places API Web Services
Dependency
Notes
Rmoving Place Add, Delete & Radar Search features
Requests to the Places API attempting to use these features will receive an error response
- Place Add
- Place Delete
- Radar Search
Deprication notices for Google Places API Web Service that effects Premium data (Zagat), types parameter, id and reference fields.
- Nearby Search -
types
parameter depricated, use parametertype
(string) - Place Details - the
reference
is now deprecated in favor ofplaceid
(placeid
originally used in this package) - Place Add - still uses
types
parameter as per service documentation - Place Autocomplete - still uses
types
parameter as per service documentation
Installation
Issue following command in console:
For laravel 6 use 6.0
.
composer require alexpechkarev/google-maps
Alternatively edit composer.json by adding following line and run composer update
"require": { ...., "alexpechkarev/google-maps":"^8.0", },
Configuration
Register package service provider and facade in 'config/app.php'
'providers' => [ ... GoogleMaps\ServiceProvider\GoogleMapsServiceProvider::class, ] 'aliases' => [ ... 'GoogleMaps' => GoogleMaps\Facade\GoogleMapsFacade::class, ]
Publish configuration file using php artisan vendor:publish --tag=googlemaps
or simply copy package configuration file and paste into config/googlemaps.php
Open configuration file config/googlemaps.php
and add your service key
/* |---------------------------------- | Service Keys |------------------------------------ */ 'key' => 'ADD YOUR SERVICE KEY HERE',
If you like to use different keys for any of the services, you can overwrite master API Key by specifying it in the service
array for selected web service.
Usage
Here is an example of making request to Geocoding API:
$response = \GoogleMaps::load('geocoding') ->setParam (['address' =>'santa cruz']) ->get();
By default, where appropriate, output
parameter set to JSON
. Don't forget to decode JSON string into PHP variable.
See Processing Response for more details on parsing returning output.
Required parameters can be specified as an array of key:value
pairs:
$response = \GoogleMaps::load('geocoding') ->setParam ([ 'address' =>'santa cruz', 'components' => [ 'administrative_area' => 'TX', 'country' => 'US', ] ]) ->get();
Alternatively parameters can be set using setParamByKey()
method. For deeply nested array use "dot" notation as per example below.
$endpoint = \GoogleMaps::load('geocoding') ->setParamByKey('address', 'santa cruz') ->setParamByKey('components.administrative_area', 'TX') //return $this ...
Another example showing request to Places API Place Add service:
$response = \GoogleMaps::load('placeadd') ->setParam([ 'location' => [ 'lat' => -33.8669710, 'lng' => 151.1958750 ], 'accuracy' => 0, "name" => "Google Shoes!", "address" => "48 Pirrama Road, Pyrmont, NSW 2009, Australia", "types" => ["shoe_store"], "website" => "http://www.google.com.au/", "language" => "en-AU", "phone_number" => "(02) 9374 4000" ]) ->get();
Available methods
load( $serviceName )
setEndpoint( $endpoint )
getEndpoint()
setParamByKey( $key, $value)
setParam( $parameters)
get()
get( $key )
containsLocation( $lat, $lng )
isLocationOnEdge( $lat, $lng, $tolrance)
load( $serviceName )
- load web service by name
Accepts string as parameter, web service name as specified in configuration file. Returns reference to it's self.
\GoogleMaps::load('geocoding') ...
setEndpoint( $endpoint )
- set request output
Accepts string as parameter, json
or xml
, if omitted defaulted to json
.
Returns reference to it's self.
$response = \GoogleMaps::load('geocoding') ->setEndpoint('json') // return $this ...
getEndpoint()
- get current request output
Returns string.
$endpoint = \GoogleMaps::load('geocoding') ->setEndpoint('json') ->getEndpoint(); echo $endpoint; // output 'json'
setParamByKey( $key, $value )
- set request parameter using key:value pair
Accepts two parameters:
key
- body parameter namevalue
- body parameter value
Deeply nested array can use 'dot' notation to assign value. Returns reference to it's self.
$endpoint = \GoogleMaps::load('geocoding') ->setParamByKey('address', 'santa cruz') ->setParamByKey('components.administrative_area', 'TX') //return $this ...
setParam( $parameters)
- set all request parameters at once
Accepts array of parameters Returns reference to it's self.
$response = \GoogleMaps::load('geocoding') ->setParam([ 'address' => 'santa cruz', 'components' => [ 'administrative_area' => 'TX', 'country' => 'US', ] ]) // return $this ...
get()
- perform web service request (irrespectively to request type POST or GET )get( $key )
- accepts string response body key, use 'dot' notation for deeply nested array
Returns web service response in the format specified by setEndpoint()
method, if omitted defaulted to JSON
.
Use json_decode()
to convert JSON string into PHP variable. See Processing Response for more details on parsing returning output.
$response = \GoogleMaps::load('geocoding') ->setParamByKey('address', 'santa cruz') ->setParamByKey('components.administrative_area', 'TX') ->get(); var_dump( json_decode( $response ) ); // output /* {\n "results" : [\n {\n "address_components" : [\n {\n "long_name" : "277",\n "short_name" : "277",\n "types" : [ "street_number" ]\n },\n ... */
Example with $key
parameter
$response = \GoogleMaps::load('geocoding') ->setParamByKey('latlng', '40.714224,-73.961452') ->get('results.formatted_address'); var_dump( json_decode( $response ) ); // output /* array:1 [▼ "results" => array:9 [▼ 0 => array:1 [▼ "formatted_address" => "277 Bedford Ave, Brooklyn, NY 11211, USA" ] 1 => array:1 [▼ "formatted_address" => "Grand St/Bedford Av, Brooklyn, NY 11211, USA" ] ... */
isLocationOnEdge( $lat, $lng, $tolrance = 0.1 )
- To determine whether a point falls on or near a polyline, or on or near the edge of a polygon, pass the point, the polyline/polygon, and optionally a tolerance value in degrees.
This method only available with Google Maps Directions API.
Accepted parameter:
$lat
- double latitude$lng
- double longitude$tolrance
- double
$response = \GoogleMaps::load('directions') ->setParam([ 'origin' => 'place_id:ChIJ685WIFYViEgRHlHvBbiD5nE', 'destination' => 'place_id:ChIJA01I-8YVhkgRGJb0fW4UX7Y', ]) ->isLocationOnEdge(55.86483,-4.25161); dd( $response ); // true
containsLocation( $lat, $lng )
-To find whether a given point falls within a polygon.
This method only available with Google Maps Directions API.
Accepted parameter:
$lat
- double latitude$lng
- double longitude
$response = \GoogleMaps::load('directions') ->setParam([ 'origin' => 'place_id:ChIJ685WIFYViEgRHlHvBbiD5nE', 'destination' => 'place_id:ChIJA01I-8YVhkgRGJb0fW4UX7Y', ]) ->containsLocation(55.86483,-4.25161); dd( $response ); // true
Support
Please open an issue on GitHub
License
Collection of Google Maps API Web Services for Laravel is released under the MIT License. See the bundled LICENSE file for details.