rbit / milk-sdk-php
Milk SDK PHP 是一个(流畅的)开源 PHP 库,使您的 PHP 应用程序与 XYZ Hub API、Geocoder API 等位置服务轻松集成。
Requires
- php: >=7.4.0
- guzzlehttp/guzzle: ~6.0
- jmikola/geojson: ^1.0
- vlucas/phpdotenv: ^4.1
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2020-10-21 07:03:51 UTC
README
Milk SDK PHP 是一个(流畅的)开源 PHP 库,使您的 PHP 应用程序与以下位置服务轻松集成:
- XYZ Hub API;
- 路由 API;
- 天气 目的地 API;
- Geocoder API;
- ...
入门
安装 SDK
在您的 PHP 项目中,通过 composer 安装软件包
composer require rbit/milk-sdk-php
配置 XYZ HUB
使用此 SDK,您可以选择以下两种方式之一使用 XYZ API:
- 使用您自己的 XYZ HUB 实例,或者
- 使用 XYZ HUB 云服务
使用您自己的 XYZ HUB 实例配置 SDK
运行您自己的 XYZ HUB 实例意味着您已经拥有https://github.com/heremaps/xyz-hub的实例。有关如何在本地上(localhost)设置 XYZ Hub 的教程:[链接](https://dev.to/robertobutti/restful-web-service-for-geospatial-data-12ii)
创建一个 .env 文件。填写如下内容:
XYZ_ACCESS_TOKEN=""
XYZ_API_HOSTNAME="https://:8080"
使用 XYZ HUB 云服务配置 SDK
使用 XYZ HUB 云服务意味着您正在使用此主机 https://xyz.api.here.com。
要使用此服务,您需要在https://developer.here.com/上以开发者身份登录并创建您的计划(例如免费增值)并获取您的访问令牌。
一旦您拥有访问令牌,创建一个 .env 文件。您可以从示例文件(.env.dist)开始。
cp .env.dist .env
然后,您需要将您的 XYZ_ACCESS_TOKEN 填入 .env 文件中,使用您的访问令牌。
快速示例
为了使用 Milk SDK,您需要
- 创建一个 PHP 文件
- 包含 autoload.php 文件
- 通过 use 声明所有导入
- 加载环境配置(通过 Dotenv)
- 获取您的令牌
- 获取您的 XYZ Spaces
- 显示您的结果
<?php // include the autoload.php file require "./vendor/autoload.php"; // declare all imports via "use" use Rbit\Milk\Xyz\Space\XyzSpace; // load environment configuration (via Dotenv) Dotenv\Dotenv::createImmutable(__DIR__)->load(); // get your Token $xyzToken = getenv("XYZ_ACCESS_TOKEN"); // Get your XYZ Spaces $s = XyzSpace::instance($xyzToken)->get(); // display your result var_dump($s);
检索您的 XYZ Spaces
要获取您的 XYZ Spaces
$s = XyzSpace::instance($xyzToken)->get();
获取所有人的 XYZ Spaces(不仅仅是您自己的 XYZ Spaces)
$s = XyzSpace::instance($xyzToken)->ownerAll()->get();
删除空间
要删除一个 XYZ Space
$xyzSpaceDeleted = XyzSpace::instance($xyzToken)->delete($spaceId);
创建空间
要创建一个新的 XYZ Space
$xyzSpaceCreated = XyzSpace::instance($xyzToken)->create("My Space", "Description");
更新空间
要更新空间 ID 为 $spaceId 的 XYZ Space
$obj = new \stdClass; $obj->title = "Edited Title"; $obj->description = "Edited Description"; $retVal = $space->update($spaceId, $obj);
统计信息
从XYZ空间获取统计信息
$statistics = XyzSpaceStatistics::instance($xyzToken)->spaceId($spaceId)->get();
功能特性
遍历功能特性
/** XyzSpaceFeature $xyzSpaceFeature */ $xyzSpaceFeature = new XyzSpaceFeature::instance($xyzToken); $result = $xyzSpaceFeature->iterate($spaceId)->get();
获取1个功能特性
您需要使用 feature() 方法并传入 $featureId 和 $spaceId
$xyzSpaceFeature = XyzSpaceFeature::instance($xyzToken); $result = $xyzSpaceFeature->feature($featureId, $spaceId)->get();
创建或编辑1个功能特性
要创建或编辑一个功能特性,您可以使用 saveOne() 方法。
$spaceId = "yourspaceid"; $featureId = "yourfeatureid"; $geoJson = new GeoJson(); $properties = [ "name" => "Berlin", "op" => "Put" ]; $geoJson->addPoint(52.5165, 13.37809, $properties, $featureId); $feature = XyzSpaceFeatureEditor::instance($xyzToken); $result = $feature->feature($geoJson->get())->saveOne($spaceId, $featureId); $feature->debug();
从geojson文件创建多个功能特性
如果您有Geojson文件,您可以将其上传到空间中。
$spaceId = "yourspaceid"; $file = "https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON"; $response = XyzSpaceFeatureEditor::instance($xyzToken) ->addTags(["file"]) ->geojson($file) ->create($spaceId);
按属性搜索功能特性
要按属性搜索功能特性,您可以使用 addSearchParams 添加搜索参数,例如下面的示例中,您正在搜索具有 name 属性等于 "Colosseo" 的功能特性。
$spaceId = "yourspaceid"; $xyzSpaceFeature = XyzSpaceFeature::instance($xyzToken)->addSearchParams("p.name", "Colosseo"); $result = $xyzSpaceFeature->search($spaceId)->get();
按邻近度搜索功能特性
搜索距离纬度=41.890251 和经度=12.492373 1000米以内的功能特性(靠近斗兽场)
$spaceId = "yourspaceid"; $result = XyzSpaceFeature::instance($xyzToken)->spatial($spaceId, 41.890251, 12.492373, 1000)->get();
天气API
获取柏林的天气预报
$jsonWeather = ApiWeather::instance($hereApiKey) ->productForecast7days() ->name("Berlin") ->getJson(); var_dump($jsonWeather);
路由API(v7)
获取步行最快路线
$r =RoutingV7::instance($hereApiKey) ->byFoot() ->typeFastest() ->startingPoint(52.5160,13.3779) ->destination(52.5185,13.4283) ->getManeuverInstructions();
路由API(v8)
获取驾车最快路线
$routing = RoutingV8::instance($hereApiKey) ->byCar() ->routingModeFast() ->startingPoint(52.5160, 13.3779) ->destination(52.5185, 13.4283) ->returnInstructions() ->langIta() ->get();
有用参考
ReDoc API文档: https://xyz.api.here.com/hub/static/redoc/
Open API文档: https://xyz.api.here.com/hub/static/swagger/