biscolab/google-maps-php-sdk

Google Maps PHP SDK.

0.9.0 2021-12-01 22:00 UTC

This package is auto-updated.

Last update: 2024-07-17 22:05:43 UTC


README

Packagist version Scrutinizer Build Status

Google Maps PHP (unofficial library). This provide simple functions to work with Google Maps APIs. You can find further informations in Google Maps Platform Documentation

Google Maps provide many services, actually at this moment this package implements only Geocoding service but others will be available soon.

Reference & Documentation

Go to complete reference or read documentation

Google Maps Services

Ready

  • Geocoding ☑️
  • Elevation ☑️
  • Places ☑️
  • Time Zone ☑️

ASAP

  • Directions (soon)
  • Distance Matrix (soon)
  • Road (soon)

Not scheduled

  • Geolocation (not scheduled)

Installation

You can install the package via composer:

composer require biscolab/google-maps-php-sdk

Examples

Watch the examples

License

MIT License

Documentation

This provide simple functions to work with Google Maps APIs. You can find further informations in Google Maps Platform Documentation

Reference

You can find complete API references

Google Maps Services

Ready

ASAP

  • Directions (soon)
  • Distance Matrix (soon)
  • Road (soon)

Not scheduled

  • Geolocation (not scheduled)

System requirements

PHP 7.1 or greater

Composer

Install the package via composer:

composer require biscolab/google-maps-php-sdk

Notice! The package is not yet stable, you may find trouble with your minimum stability settings. Further documentation coming asap.

Google Maps is a service supplied by Google and first of all you must register your app project on the Google Cloud Platform Console and get a Google API key which you can add to your app or website (source: official Google Maps documentation).

  1. Read the Pricing table
  2. Create your project by clicking on "Get started"
  3. Create project credentials
  4. Enable services (Geocoding API, Elevation API, etc...)

Google Console

Google Console main page

Geocoding API

The Geocoding API is a service that provides geocoding and reverse geocoding of addresses.

Official Google Geocoding documentation

Initialize Geocoding Object

First of all replace YOUR_API_KEY with your actual API key.

use Biscolab\GoogleMaps\Api\Geocoding;
use Biscolab\GoogleMaps\Enum\GoogleMapsApiConfigFields;

$geocoding = new Geocoding([
	GoogleMapsApiConfigFields::KEY => 'YOUR_API_KEY'
]);

Get results

You have 3 different ways to retrieve data of your place!

Go to complete SDK reference

Geocoding (Latitude/Longitude Lookup) by address as string

Official Google documentation

getByAddress accept following arguments:

$results = $geocoding->getByAddress('Insert your address here, city, postal code etc...');

Change response language using setLanguage method

You can find the list of supported languages here: https://developers.google.com/maps/faq#languagesupport

// Set Spanish language
$results = $geocoding->setLanguage('es')->getByAddress('Insert your address here, city, postal code etc...');

Reverse Geocoding (Address Lookup) by Location/LatLng object

Official Google documentation

getByLatLng (getReverse alias is deprecated) accept a LatLng object which represents the location of the place.

$results = $geocoding->getByLatLng(new LatLng([
			LatLngFields::LAT => $lat,
			LatLngFields::LNG => $lng,
		]));

// Alias `getReverse` deprecated!!!
$results = $geocoding->getReverse(new LatLng([
			LatLngFields::LAT => $lat,
			LatLngFields::LNG => $lng,
		]));

Change response language using setLanguage method

You can find the list of supported languages here: https://developers.google.com/maps/faq#languagesupport

// Set Spanish language
$results = $geocoding->setLanguage('es')->getByLatLng(new LatLng([
			LatLngFields::LAT => $lat,
			LatLngFields::LNG => $lng,
		]));

// Use the same way for getReverse (alias) method

By Place ID as string

getByPlaceId accept as parameter the address the place ID.

$results = $geocoding->getByPlaceId('YOUR_PLACE_ID');

Use results

Results is/are a Biscolab\GoogleMaps\Http\GeocodingResultsCollection object.
First thing you should know how many results there are in your GeocodingResultsCollection using count method.

$number_of_results = $results->count();

To retrieve the first result you can use the first method:

$first_result = $results->first();

$first_result is an instance of GeocodingResult class and has the following methods:

Elevation API

The Elevation API provides elevation data for all locations on the surface of the earth, including depth locations on the ocean floor (which return negative values).

There are two types of request:

  • Positional Requests
  • Sampled Path Requests

At the moment this package support only Positional Requests but I'm working on Sampled Path Requests and it will be available soon.

Official Google Elevation documentation

Initialize Elevation Object

First of all replace YOUR_API_KEY with your actual API key.

use Biscolab\GoogleMaps\Api\Elevation;
use Biscolab\GoogleMaps\Enum\GoogleMapsApiConfigFields;

$elevation = new Elevation([
	GoogleMapsApiConfigFields::KEY => 'YOUR_API_KEY'
]);

Get results (Positional Requests)

First of all you have to prepare the locations variable, it can be a single Location object, an array of Location objects or a polyline string.

Single Location object

Create a Location object using latitude and longitude.

// get results by single Location object
$locations = new Location([
	LatLngFields::LAT => 39.73915360,
	LatLngFields::LNG => -104.9847034,
]);

Array of Location objects

Using multiple Location objects inside an array

// or by multiple Location objects
$locations = [
	new Location([
		LatLngFields::LAT => 39.73915360,
		LatLngFields::LNG => -104.9847034,
	]),
	// ... more locations
	new Location([
		LatLngFields::LAT => 50.123,
		LatLngFields::LNG => 99.456,
	])
];

Polyline encoded string

Encode a location using the Encoded Polyline Algorithm Format

// or by polyline
$locations = 'enc:gfo}EtohhU';

Make API call

// make API call
$results = $elevation->getByLocations($locations);

Get results (Sampled Path Requests)

First of all you have to prepare the path variable, it can be an array of Location objects or a polyline string.

Array of Location objects

Using multiple Location objects inside an array

// or by multiple Location objects
$path = [
	new Location([
		LatLngFields::LAT => 39.73915360,
		LatLngFields::LNG => -104.9847034,
	]),
	// ... more locations
	new Location([
		LatLngFields::LAT => 50.123,
		LatLngFields::LNG => 99.456,
	])
];

Polyline encoded string

Encode a location using the Encoded Polyline Algorithm Format

// or by polyline
$path = 'enc:gfo}EtohhUxD@bAxJmGF';

Make API call

// make API call
$samples = 5; // must be int > 0
$results = $elevation->getBySampledPath($path, $samples);

Use results

Results is/are a Biscolab\GoogleMaps\Http\ElevationResultsCollection object.
First thing you should know how many results there are in your ElevationResultsCollection using count method.

$number_of_results = $results->count();

To retrieve the first result you can use the first method:

$first_result = $results->first();

$first_result is an instance of ElevationResult class and has the following methods:

Places API

The Places API allows you to query for place information on a variety of categories, such as: establishments, prominent points of interest, geographic locations, and more. You can search for places either by proximity or a text string (credits: Official Documentation website.

There are 3 types of request:

  • Find Place requests
  • Nearby Search requests
  • Text Search requests

Official Google Place documentation

Initialize Places Object

First of all replace YOUR_API_KEY with your actual API key.

use Biscolab\GoogleMaps\Api\Places;
use Biscolab\GoogleMaps\Enum\GoogleMapsApiConfigFields;

$place = new Places([
	GoogleMapsApiConfigFields::KEY => 'YOUR_API_KEY'
]);

Find Places requests

This function takes a text input (name, address or phone number) and returns a place.

Using name or address

Search place using the "name" or "address".

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

// get results by place's name or address
$result = $places->findPlaceByText("Museum of Contemporary Art Australia");

findPlaceByText method accepts 3 arguments

Find further details about request fields (required, types, etc...) here: https://developers.google.com/places/web-service/search#FindPlaceRequests

Using phone number

Search place using the "phone number".

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

// get results by place's phone number
$result = $places->findPlaceByPhoneNumber("+61293744000");

findPlaceByPhoneNumber method accepts 3 arguments

Find further details about request fields (required, types, etc...) here: https://developers.google.com/places/web-service/search#FindPlaceRequests

Nearby Search requests

This function looks for places within a specified area.

Using location & radius

use Biscolab\GoogleMaps\Object\Location;
use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

$location = new Location([
        LatLngFields::LAT => -33.8670522,
        LatLngFields::LNG => 151.1957362,
    ]);
$radius = 1000;

$result = $places->findNearbyPlaceByRadius($location, $radius);

findNearbyPlaceByRadius method accepts 3 arguments

Rank by distance

use Biscolab\GoogleMaps\Object\Location;
use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

$location = new Location([
        LatLngFields::LAT => -33.8670522,
        LatLngFields::LNG => 151.1957362,
    ]);

// You MUST set at least one of following values
$params = [
    GoogleMapsRequestFields::KEYWORD => 'a keyword',
    GoogleMapsRequestFields::NAME => 'name of the place you are looking for',
    // Biscolab\GoogleMaps\Values\PlaceTypeValues enum class
    GoogleMapsRequestFields::TYPE => 'Type of the place you are looking for'
];

$result = $places->findNearbyPlaceByDistance($location, $params);

findNearbyPlaceByDistance method accepts 2 arguments

Find further details about request fields (required, types, etc...) here: https://developers.google.com/places/web-service/search#PlaceSearchRequests

Text Search request

This service returns information about a set of places based on a string.

Search by query

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

$query = "restaurants in Sydney";

$params = [
    ...
];

$result = $places->textSearch($query, $params);

textSearch method accepts 2 arguments

Find further details about request fields (required, types, etc...) here: https://developers.google.com/places/web-service/search#TextSearchRequests

Place's Details

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

$place_id = "ChIJN1t_tDeuEmsRUsoyG83frY4";

$params = [
    ...
];

$result = $places->details($place_id, $params);

details method accepts 2 arguments

Find further details about request fields (required, types, etc...) here: https://developers.google.com/places/web-service/details#PlaceDetailsRequests

Use results

Results is/are a Biscolab\GoogleMaps\Http\PlaceResultsCollection object.

Current page

First thing you should know how many results there are in your PlaceResultsCollection using count method.

$number_of_results = $results->count();

To retrieve the first result you can use the first method:

$first_result = $results->first();

$first_result is an instance of PlaceResult class and has the following methods:

Next result page

Results can be paginated. How do you know id a result has more pages?

// getNextPage method checks if $result has "next page"
$next_page_result = $result->getNextPage();

Time Zone API

The Time Zone API provides time offset data for locations on the surface of the earth

Official Google TimeZone documentation

Initialize TimeZone Object

First of all replace YOUR_API_KEY with your actual API key.

use Biscolab\GoogleMaps\Api\TimeZone;
use Biscolab\GoogleMaps\Enum\GoogleMapsApiConfigFields;

$timezone = new TimeZone([
	GoogleMapsApiConfigFields::KEY => 'YOUR_API_KEY'
]);

Get result

Go to complete SDK reference

By location and timestamp

$result = $timezone->get($location, $timestamp, $language);

get accepts 3 arguments

Use result

Result is an instance of Biscolab\GoogleMaps\Http\Result\TimeZoneResult class and has the following methods: