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-09-17 22:31:54 UTC


README

Packagist version Scrutinizer Build Status

Google Maps PHP(非官方库)。此库提供与Google Maps API进行交互的简单函数。您可以在Google Maps平台文档中找到更多信息。

Google Maps提供许多服务,目前此包仅实现地理编码服务,但其他服务将很快可用。

参考与文档

访问完整参考或阅读文档

Google Maps服务

准备就绪

  • 地理编码 ☑️
  • 海拔 ☑️
  • 地点 ☑️
  • 时区 ☑️

ASAP

  • 路线(即将推出)
  • 距离矩阵(即将推出)
  • 道路(即将推出)

未计划

  • 地理位置(未计划)

安装

您可以通过composer安装此包

composer require biscolab/google-maps-php-sdk

示例

查看示例

许可

MIT License

文档

此库提供与Google Maps API进行交互的简单函数。您可以在Google Maps平台文档中找到更多信息。

参考

您可以在完整API参考中找到。

Google Maps服务

准备就绪

ASAP

  • 路线(即将推出)
  • 距离矩阵(即将推出)
  • 道路(即将推出)

未计划

  • 地理位置(未计划)

系统要求

PHP 7.1或更高版本

Composer

通过composer安装此包

composer require biscolab/google-maps-php-sdk

注意!此包尚未稳定,您可能会遇到最小稳定性的问题。更多文档即将推出

Google Maps是由Google提供的一项服务。首先,您必须在Google Cloud Platform控制台注册您的应用项目,并获取一个Google API密钥,您可以将其添加到您的应用程序或网站(来源:官方Google Maps文档)。

  1. 阅读定价表
  2. 通过点击“开始”创建您的项目
  3. 创建项目凭据
  4. 启用服务(地理编码API、海拔API等...)

Google控制台

Google控制台主页

地理编码API

地理编码API是一种提供地址地理编码和反向地理编码的服务。

官方Google地理编码文档

初始化地理编码对象

首先将YOUR_API_KEY替换为您的实际API密钥。

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

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

获取结果

您有3种不同的方式来获取您地点的数据!

访问SDK参考

通过地址作为字符串进行地理编码(纬度/经度查找)

官方Google文档

getByAddress接受以下参数

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

使用setLanguage方法更改响应语言

您可以在以下位置找到支持的语种列表: https://developers.google.com/maps/faq#languagesupport

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

反向地理编码(地址查找)通过位置/LatLng对象

官方Google文档

getByLatLnggetReverse别名已弃用)接受一个代表地点位置的LatLng对象。

$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,
		]));

使用setLanguage方法更改响应语言

您可以在以下位置找到支持的语种列表: 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

使用字符串作为地点ID

getByPlaceId接受作为参数的地点ID地址。

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

使用结果

结果是一个Biscolab\GoogleMaps\Http\GeocodingResultsCollection对象。
首先,您应该知道您的GeocodingResultsCollection中有多少结果,使用count方法。

$number_of_results = $results->count();

要检索第一个结果,您可以使用first方法

$first_result = $results->first();

$first_resultGeocodingResult类的实例,并具有以下方法

高程API

高程API为地球上所有表面位置提供高程数据,包括海底深度位置(返回负值)。

有两种类型的请求

  • 位置请求
  • 采样路径请求

目前此包只支持位置请求,但我正在开发采样路径请求,它将很快可用。

官方Google高程文档

初始化高程对象

首先将YOUR_API_KEY替换为您的实际API密钥。

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

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

获取结果(位置请求)

首先,您必须准备locations变量,它可以是单个Location对象、Location对象数组或多段字符串。

单个位置对象

使用纬度和经度创建位置对象。

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

位置对象数组

在数组中使用多个位置对象

// 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,
	])
];

多段编码字符串

使用编码多段算法格式对位置进行编码。

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

执行API调用

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

获取结果(采样路径请求)

首先,您必须准备path变量,它可以是Location对象数组或多段字符串。

位置对象数组

在数组中使用多个位置对象

// 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,
	])
];

多段编码字符串

使用编码多段算法格式对位置进行编码。

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

执行API调用

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

使用结果

结果是Biscolab\GoogleMaps\Http\ElevationResultsCollection对象。
首先,您应该知道您的ElevationResultsCollection中有多少结果,使用count方法。

$number_of_results = $results->count();

要检索第一个结果,您可以使用first方法

$first_result = $results->first();

$first_resultElevationResult类的实例,并具有以下方法

地点API

地点API允许您查询各种类别的地点信息,例如:机构、著名地标、地理位置等。您可以通过邻近度或文本字符串(来源:官方文档网站)搜索地点。

有3种类型的请求

  • 查找地点请求
  • 附近搜索请求
  • 文本搜索请求

官方Google地点API文档

初始化地点对象

首先将YOUR_API_KEY替换为您的实际API密钥。

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

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

查找地点请求

此函数接受文本输入(名称、地址或电话号码)并返回一个地点。

使用名称或地址

使用“名称”或“地址”搜索地点。

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

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

findPlaceByText方法接受3个参数

在此处查找请求字段的更多详细信息(必需、类型等...):https://developers.google.com/places/web-service/search#FindPlaceRequests

使用电话号码

使用“电话号码”搜索地点。

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

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

findPlaceByPhoneNumber方法接受3个参数

在此处查找请求字段的更多详细信息(必需、类型等...):https://developers.google.com/places/web-service/search#FindPlaceRequests

附近搜索请求

此函数在指定区域内查找地点。

使用位置和半径

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 方法接受 3 个参数

按距离排序

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 方法接受 2 个参数

在此处查找有关请求字段(必需项、类型等)的更多详细信息:https://developers.google.com/places/web-service/search#PlaceSearchRequests

文本搜索请求

此服务基于字符串返回一组地点的信息。

按查询搜索

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

$query = "restaurants in Sydney";

$params = [
    ...
];

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

textSearch 方法接受 2 个参数

在此处查找有关请求字段(必需项、类型等)的更多详细信息:https://developers.google.com/places/web-service/search#TextSearchRequests

地点的详细信息

use Biscolab\GoogleMaps\Fields\GoogleMapsRequestFields;

$place_id = "ChIJN1t_tDeuEmsRUsoyG83frY4";

$params = [
    ...
];

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

details 方法接受 2 个参数

在此处查找有关请求字段(必需项、类型等)的更多详细信息:https://developers.google.com/places/web-service/details#PlaceDetailsRequests

使用结果

结果是一个 Biscolab\GoogleMaps\Http\PlaceResultsCollection 对象。

当前页面

首先,您应该使用 count 方法了解您的 PlaceResultsCollection 中有多少个结果。

$number_of_results = $results->count();

要检索第一个结果,您可以使用first方法

$first_result = $results->first();

$first_resultPlaceResult 类的一个实例,并具有以下方法

下一页结果

结果可以进行分页。您如何知道结果是否有更多页面?

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

时区 API

时区 API 为地球表面的地点提供时间偏移数据。

官方 Google 时区文档

初始化时区对象

首先将YOUR_API_KEY替换为您的实际API密钥。

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

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

获取结果

前往完整的 SDK 参考

通过位置和时间戳

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

get 接受 3 个参数

使用结果

结果是一个 Biscolab\GoogleMaps\Http\Result\TimeZoneResult 类的实例,并具有以下方法