cyrildewit/php-maps-urls

生成 Google Maps URLs API 的 URL

v1.0.0 2021-02-01 13:38 UTC

This package is auto-updated.

Last update: 2024-09-10 15:54:43 UTC


README

Packagist run-tests StyleCI Codecov branch Total Downloads License

此包允许您构建 Google Maps URLs API 的 URL。

以下是一个快速示例

use CyrildeWit\MapsUrls\UrlGenerator;
use CyrildeWit\MapsUrls\Actions\SearchAction;
use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$searchAction = (new SearchAction())
    ->setQuery('The Netherlands Amsterdam');
$searchUrl = (new UrlGenerator($searchAction))->generate();

$directionsAction = (new DirectionsAction())
    ->setOrigin('The Netherlands Amsterdam')
    ->setDestination('The Netherlands Utrecht');
$directionsUrl = (new UrlGenerator($directionsAction))->generate();

概述

此包提供了一种方便的方式来生成 Google Maps URLs API 的 URL。每个动作都有自己的抽象,可以用来生成 URL。有关此 API 的更多信息,请参阅 Google Maps URLs API 文档

文档

目录

  1. 入门
  2. 使用
  3. 致谢
  4. 许可

入门

要求

此包需要 PHP 7.4+

版本信息

安装

您可以使用 Composer 安装此包:

composer require cyrildewit/php-maps-urls

使用

生成 URL

CyrildeWit\MapsUrls\UrlGenerator 类负责生成 URL。构造函数接受一个动作类的实例。动作类扩展 CyrildeWit\MapsUrls\Actions\AbstractAction

use CyrildeWit\MapsUrls\UrlGenerator;
use CyrildeWit\MapsUrls\Actions\SearchAction;

$searchAction = (new SearchAction())
    ->setQuery('Eindhoven, Nederland');
$searchUrl = (new UrlGenerator($searchAction))->generate();

输出 $searchUrl: https://www.google.com/maps/search/?api=1&query=Eindhoven,%20Nederland

动作

Google Maps URLs API 允许您生成执行特定操作的 URL。这些动作可以通过使用提供的动作类之一进行配置。

搜索

根据官方文档:“启动一个显示特定地点图标的 Google Map,或执行通用搜索并启动地图以显示结果。”

查询

要设置搜索动作的查询,您可以调用 setQuery(string $query) 方法。

use CyrildeWit\MapsUrls\Actions\SearchAction;

$searchAction = (new SearchAction())
    ->setQuery('Eindhoven, Nederland');

查询参数也可以由纬度/经度坐标组成。您可以选择自己添加它们或使用 setCoordinates(float $latitude, float $longitude) 方法。

use CyrildeWit\MapsUrls\Actions\SearchAction;

$searchAction = (new SearchAction())
    ->setQueryCoordinates(47.5951518, -122.3316393);
查询地点 ID

如果您想为搜索动作指定可选的地点 ID,可以使用 setQueryPlaceId(string $placeId) 方法添加。

use CyrildeWit\MapsUrls\Actions\SearchAction;

$searchAction = (new SearchAction())
    ->setQueryPlaceId('ChIJn8N5VRvZxkcRmLlkgWTSmvM');
魔术构造函数

要使用初始查询参数值实例化一个搜索动作,您可以使用魔术 SearchAction::make(array $options) 方法。

use CyrildeWit\MapsUrls\Actions\SearchAction;

$searchAction = SearchAction::make([
    'query' => 'Eindhoven, Nederland',
    'query_place_id' => 'ChIJn8N5VRvZxkcRmLlkgWTSmvM',
]);

路线

根据官方文档:“请求路线并将结果启动到 Google Maps 中。”

起点

起点可以使用 setOrigin(string $origin) 方法定义。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$directionsAction = (new DirectionsAction())
    ->setOrigin('Eindhoven, Nederland');
起点地点 ID

起点地点 ID 可以使用 setOriginPlaceId(string $placeId) 方法定义。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$directionsAction = (new DirectionsAction())
    ->setOrigin('Eindhoven, Nederland')
    ->setOriginPlaceId('ChIJn8N5VRvZxkcRmLlkgWTSmvM');
终点

终点可以使用 setDestination(string $destination) 方法定义。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$directionsAction = (new DirectionsAction())
    ->setDestination('Monnickendam, Nederland');
终点地点 ID

终点地点 ID 可以使用 setDestinationPlaceId(string $placeId) 方法定义。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$directionsAction = (new DirectionsAction())
    ->setDestination('Monnickendam, Nederland')
    ->setDestinationPlaceId('ChIJTZfQeLgFxkcRQhAYGf9HbrU');
旅行模式

可以使用 setTravelMode(string $travelmode) 方法定义旅行模式。有效的选项有

  • driving
  • walking
  • bicycling
  • transit

您可以使用 CyrildeWit\MapsUrls\Enums\TravelMode 中定义的常量来引用这些选项。

CyrildeWit\MapsUrls\Enums\TravelMode::DRIVING;
CyrildeWit\MapsUrls\Enums\TravelMode::WALKING;
CyrildeWit\MapsUrls\Enums\TravelMode::BICYCLING;
CyrildeWit\MapsUrls\Enums\TravelMode::TRANSIT;

示例

use CyrildeWit\MapsUrls\Actions\DirectionsAction;
use CyrildeWit\MapsUrls\Enums\TravelMode;

$directionsAction = (new DirectionsAction())
    ->setTravelmode(TravelMode::BICYCLING);

当提供无效的旅行模式时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidTravelMode 异常。

方向动作

可以使用 setDirectionAction(string $directionAction) 方法定义方向动作。唯一的有效选项是 navigate。您可以使用 DirectionAction 类中的 NAVIGATE 常量以方便起见。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;
use CyrildeWit\MapsUrls\Enums\DirectionAction;

$directionsAction = (new DirectionsAction())
    ->setDirectionAction(DirectionAction::NAVIGATE);

当提供无效的方向动作时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidDirectionAction 异常。

航点

可以使用方法 setWaypoints(array $waypoints) 定义航点。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$directionsAction = (new DirectionsAction())
    ->setWaypoints([
        'Berlin,Germany',
        'Paris,France'
    ]);
航点位置ID

可以使用方法 setWaypointPlaceIds(array $placeIds) 定义航点位置ID。

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$directionsAction = (new DirectionsAction())
    ->setWaypoints([
        'Berlin,Germany',
        'Paris,France'
    ])
    ->setWaypointPlaceIds([
        'ChIJAVkDPzdOqEcRcDteW0YgIQQ',
        'ChIJD7fiBh9u5kcRYJSMaMOCCwQ'
    ]);
魔术构造函数

要使用初始查询参数值实例化一个方向动作,可以调用魔法方法 DirectionsAction::make(array $options)

use CyrildeWit\MapsUrls\Actions\DirectionsAction;
use CyrildeWit\MapsUrls\Enums\TravelMode;
use CyrildeWit\MapsUrls\Enums\DirectionAction;

$directionsAction = DirectionsAction::make([
    'origin' => 'Eindhoven, Nederland',
    'origin_place_id' => 'ChIJn8N5VRvZxkcRmLlkgWTSmvM',
    'destination' => 'Monnickendam, Nederland',
    'destination_place_id' => 'ChIJTZfQeLgFxkcRQhAYGf9HbrU',
    'travelmode' => TravelMode::DRIVING,
    'dir_action' => DirectionAction::NAVIGATE,
    'waypoints' => [
        'Berlin,Germany',
        'Paris,France'
    ],
    'waypoint_place_ids' => [
        'ChIJAVkDPzdOqEcRcDteW0YgIQQ',
        'ChIJD7fiBh9u5kcRYJSMaMOCCwQ'
    ],
]);

显示地图

来自官方文档:“启动没有标记或方向的Google Maps。”

地图动作

查询参数 map_action 是必需的,因此默认添加,值为 map

中心点

可以使用方法 setCenter(float $latitude, float $longitude) 通过设置坐标来定义地图的中心点。

use CyrildeWit\MapsUrls\Actions\DisplayMapAction;

$displayMapAction = (new DisplayMapAction())
    ->setCenter(-33.8569, 151.2152);
缩放级别

可以使用方法 setZoom(int $zoom) 定义地图的缩放级别。

use CyrildeWit\MapsUrls\Actions\DisplayMapAction;

$displayMapAction = (new DisplayMapAction())
    ->setZoom(10);
基础地图

可以使用方法 setBaseMap(string $baseMap) 定义基础地图。有效选项有

  • none
  • traffic
  • bicycling

您可以使用 CyrildeWit\MapsUrls\Enums\TravelMode 中定义的常量来引用这些选项。

CyrildeWit\MapsUrls\Enums\BaseMap::NONE;
CyrildeWit\MapsUrls\Enums\BaseMap::TRAFFIC;
CyrildeWit\MapsUrls\Enums\BaseMap::BICYCLING;

示例

use CyrildeWit\MapsUrls\Actions\DisplayMapAction;
use CyrildeWit\MapsUrls\Enums\BaseMap;

$displayMapAction = (new DisplayMapAction())
    ->setBaseMap(BaseMap::TRAFFIC);

当提供了无效的基础地图时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidBaseMap 异常。

图层

可以使用方法 setLayer(string $layer) 定义图层。有效选项有

  • none
  • transit
  • traffic
  • bicycling

这些选项可以使用在 CyrildeWit\MapsUrls\Enums\Layer 中定义的常量进行引用。

CyrildeWit\MapsUrls\Enums\Layer::NONE;
CyrildeWit\MapsUrls\Enums\Layer::TRANSIT;
CyrildeWit\MapsUrls\Enums\Layer::TRAFFIC;
CyrildeWit\MapsUrls\Enums\Layer::BICYCLING;

示例

use CyrildeWit\MapsUrls\Actions\DisplayMapAction;
use CyrildeWit\MapsUrls\Enums\Layer;

$displayMapAction = (new DisplayMapAction())
    ->setLayer(Layer::TRAFFIC);

当提供了无效的图层时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidLayer 异常。

魔术构造函数

要使用初始查询参数值实例化一个显示街景全景动作,可以调用魔法方法 DirectionsAction::make(array $options)

use CyrildeWit\MapsUrls\Actions\DirectionsAction;
use CyrildeWit\MapsUrls\Enums\BaseMap;
use CyrildeWit\MapsUrls\Enums\Layer;

$displayMapAction = DirectionsAction::make([
     'center' => [-33.8569, 151.2152],
     'zoom' => 10,
     'basemap' => BaseMap::BICYCLING,
     'layer' => Layer::TRANSIT,
]);

显示街景全景

来自官方文档:“启动一个交互式的全景图像。”

地图动作

查询参数 map_action 是必需的,因此默认添加,值为 pano

视点

可以使用方法 setViewpoint(float $latitude, float $longitude) 定义视点。

use CyrildeWit\MapsUrls\Actions\DisplayStreetViewPanoramaAction;

$displayStreetViewPanoramaAction = (new DisplayStreetViewPanoramaAction())
    ->setViewpoint(48.857832, 2.295226);
全景ID

可以使用方法 setPanoramaId(string $id) 定义全景ID。

use CyrildeWit\MapsUrls\Actions\DisplayStreetViewPanoramaAction;

$displayStreetViewPanoramaAction = (new DisplayStreetViewPanoramaAction())
    ->setPanoramaId('tu510ie_z4ptBZYo2BGEJg');
朝向

可以使用方法 setHeading(int $degrees) 定义朝向。期望的值是从180到360度。

use CyrildeWit\MapsUrls\Actions\DisplayStreetViewPanoramaAction;

$displayStreetViewPanoramaAction = (new DisplayStreetViewPanoramaAction())
    ->setHeading(120);

当提供了无效的朝向时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidHeading 异常。

俯仰角

可以使用方法 setPitch(int $degrees) 定义俯仰角。期望的值是从-90到80度。

use CyrildeWit\MapsUrls\Actions\DisplayStreetViewPanoramaAction;

$displayStreetViewPanoramaAction = (new DisplayStreetViewPanoramaAction())
    ->setPitch(40);

当提供了无效的俯仰角时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidPitch 异常。

视野

可以使用方法 setFov(int $degrees) 定义视野。期望的值是从-10到100度。

use CyrildeWit\MapsUrls\Actions\DisplayStreetViewPanoramaAction;

$displayStreetViewPanoramaAction = (new DisplayStreetViewPanoramaAction())
    ->setFov(80);

当提供了无效的视野时,将抛出 CyrildeWit\MapsUrls\Exceptions\InvalidFov 异常。

魔术构造函数

要使用初始查询参数值实例化一个显示街景全景动作,可以调用魔法方法 DirectionsAction::make(array $options)

use CyrildeWit\MapsUrls\Actions\DirectionsAction;

$displayStreetViewPanoramaAction = DirectionsAction::make([
    'viewpoint' => [48.857832, 2.295226],
    'pano' => 'tu510ie_z4ptBZYo2BGEJg',
    'heading' => 120,
    'pitch' => 40,
    'fov' => 80,
]);

致谢

还可以查看参与此项目的贡献者列表

许可

该项目采用MIT许可 - 请参阅LICENSE 文件以获取详细信息。