PHP client library(SDK) for Google Maps API Web Services.
Fork of older Nick Tsai's library.
- Minimal php is 8.1
- Type checks
- Dependency injection
- With PSR and other remote libraries than Guzzle/Curl in mind
- Only API key now usable
For nearly any raw php / custom frameworks:
// somewhere in configuration something like this
/// ... with anonymous function as setter in DI
function (): \kalanis\google_maps\ClientConfig
{
return \kalanis\google_maps\ClientConfig::init('Your API Key');
}Then on desired pages:
class YourPresenter extends YourFramework
{
public function __construct(
// ... other used classes
protected readonly kalanis\google_maps\Client $mapService,
) {
}
public function process(): void
{
// Geocoding an address
$geocodeResult = $this->mapService->geocode('Pelješki most, Croatia');
// Look up an address with reverse geocoding
$reverseGeocodeResult = $this->mapService->reverseGeocode(42.916667, 17.533333);
// Request directions via public transit
$directionsResult = $this->mapService->directions('Ploče', 'Dubrovnik', [
'mode' => "transit",
'departure_time' => time(),
]);
}
}For Laravel:
/// app\Providers\AppServiceProvider.php
public function register()
{
// ... other binds
$this->app()->bind(\kalanis\google_maps\Client::class, function(
Psr\Http\Client\ClientInterface $client,
Psr\Http\Message\RequestInterface $request,
) {
return new \kalanis\google_maps\Client(
$request,
$client,
\kalanis\google_maps\ClientConfig::init('Your API Key'),
);
}
);
}And then in the controller is the code the same as in another random framework.
For Symfony:
# config/services.yaml
services:
kalanis\google_maps\ClientConfig:
arguments: ['Your API Key']
kalanis\google_maps\Client:
arguments: ['@Psr\Http\Message\RequestInterface', '@Psr\Http\Client\ClientInterface', '@kalanis\google_maps\ClientConfig']namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/your-maps')]
class YourMapsPresenter extends AbstractController
{
public function __construct(
// ... other used classes
protected readonly kalanis\google_maps\Client $mapService,
) {
}
#[Route('/geocode', name: 'maps_geocode', defaults: ['where' => 'Pelješki most, Croatia'], methods: ['GET'])]
public function geocode(Request $request, string $where): Response
{
$geocodeResult = $this->mapService->geocode($where);
return new JsonResponse($geocodeResult)
}
#[Route('/reverse-geocode', lat: '42.916667', lon: '17.533333', defaults: ['lat' => '42.916667', 'lon' => '17.533333'], methods: ['GET'])]
public function reverseGeocode(Request $request, string $lat, string $lon): Response
{
$geocodeResult = $this->mapService->reverseGeocode([$lat, $lon]);
return new JsonResponse($geocodeResult)
}
}For Nette:
services:
# ... other ones
- kalanis\google_maps\ClientConfig('Your API Key')
- kalanis\google_maps\Client
# ... other onesOr with parameters for different servers/services:
parameters:
# ... other ones
googleMapsKey: 'Your API Key'
# ... other ones
services:
# ... other ones
- kalanis\google_maps\ClientConfig(%parameters.googleMapsKey%)
- kalanis\google_maps\Client
# ... other onesAnd then in class like in other frameworks with DI.
The PHP Client for Google Maps Services is a PHP Client library for the following Google Maps APIs:
- Maps
- Routes
- Places
- PHP 8.1+ or higher
Each Google Maps Web Service request requires an API key or client ID. API keys are freely available with a Google Account at https://developers.google.com/console. The type of API key you need is a Server key.
To get an API key:
-
Visit https://developers.google.com/console and log in with a Google Account.
-
Select one of your existing projects, or create a new project.
-
Enable the Google Maps Services API(s) you plan to use, such as:
- Directions API
- Distance Matrix API
- Geocoding API
- Places API
- Roads API
- Time Zone API
- Nearby API
-
Create a new Server key.
-
If you'd like to restrict requests to a specific IP address, do so now.
For guided help, follow the instructions for the Directions API. You only need one API key, but remember to enable all the APIs you need. For even more information, see the guide to API keys.
Important: This key should be kept secret on your server.
Run Composer in your project:
composer require alex-kalanis/google-maps-php-services
Then you could call it after Composer is loaded depended on your PHP framework:
require __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
use kalanis\google_maps\Client;Before using any Google Maps Services, first you need to create a Client with configuration, then use the client to access Google Maps Services.
Create a Client using API key:
$gmaps = new \kalanis\google_maps\Client(
new \PsrMock\Psr7\Request(),
new \PsrMock\Psr18\Client(),
new \kalanis\google_maps\ConfigClient('Your API Key'),
);You could set language for Client for all services:
$gmaps = new \kalanis\google_maps\Client(
new \PsrMock\Psr7\Request(),
new \PsrMock\Psr18\Client(),
new \kalanis\google_maps\ConfigClient('Your API Key', 'pt-br'),
);Elevation API overview | Google for Developers
// Get elevation by locations parameter
$elevationResult = $gmaps->elevation(25.0339639, 121.5644722);
$elevationResult = $gmaps->elevation('25.0339639', '121.5644722');Get a route | Google for Developers
$routes = $gmaps->computeRoutes($originArray, $destinationArray, $fullBodyArray, $fieldMask)
// Get the route data between two places simply
$routes = $gmaps->computeRoutes([
"location" => [
"latLng" => [
"latitude" => 37.419734,
"longitude" => -122.0827784
]
]
],
[
"location" => [
"latLng" => [
"latitude" => 37.41767,
"longitude" => -122.079595
]
]
]);
// Get the full route data between two places with full request data
$routes = $gmaps->computeRoutes([...], [...], ["travelMode": "DRIVE", ...], '*');Snap to Roads | Google for Developers
$roads = $gmaps->snapToRoads([[-35.27801,149.12958], [-35.28032,149.12907], [-35.28099,149.12929]]);Getting directions | Google for Developers
// Request directions via public transit
$directionsResult = $gmaps->directions('Milano', 'Venezia', [
'mode' => "transit",
'departure_time' => time(),
]);Get started with the Distance Matrix API | Google for Developers
// Get the distance matrix data between two places
$distanceMatrixResult = $gmaps->distanceMatrix('Canberra', 'Perth');
// With Imperial units
$distanceMatrixResult = $gmaps->distanceMatrix('Stonehenge', 'Bristol', [
'units' => 'imperial',
]);Geocoding API overview | Google for Developers
// Geocoding an address
$geocodeResult = $gmaps->geocode('Avenida Maracanã 350, Rio de Janeiro');
// Look up an address with reverse geocoding
$reverseGeocodeResult = $gmaps->reverseGeocode(-22.912167, -43.230164);Geolocation API overview | Google for Developers
// Simple geolocate
$geolocateResult = $gmaps->geolocate([]);Time Zone API overview | Google for Developers
// requests the time zone data for given location
$timezoneResult = $gmaps->timezone([25.381111, 83.021389]); // SárnáthNearby API overview | Google for Developers
// requests the nearby points for given location
$nearbyResult = $gmaps->nearby('restaurant', [25.71874, 32.6574]); // in LuxorFind by Place API overview | Google for Developers
// requests the place points for given location by given place
$nearbyResult = $gmaps->findPlace('Champs Elysees', 'restaurant', ['name', 'current_opening_hours']);Find by Text API overview | Google for Developers
// requests the place points for given location by given text
$nearbyResult = $gmaps->findText('Sagrada Familia', 350, [], 3, 0, true);Place details API overview | Google for Developers
// requests the details about place point
$nearbyResult = $gmaps->placeDetails('ChIJN1t_tDeuEmsRUsoyG83frY4', ['name', 'current_opening_hours']);
