route4me/route4me-php

此包的最新版本(1.3.1)没有可用的许可信息。

使用我们的PHP SDK访问Route4Me的物流即服务API

1.3.1 2024-03-08 16:01 UTC

README

使用我们的PHP SDK访问Route4Me的物流即服务API

Scrutinizer Code Quality Code Coverage Build Status

Route4Me做什么?

用通俗易懂的话来说,Route4Me解决了旅行商问题车辆路径问题的复杂变体。从更技术性的角度来看,Route4Me解决了涉及多个数学和科学学科的HP-hard物流问题,如工业工程、运筹学、算法图论、计算几何、组合优化、车队管理、现场服务管理、遥测

Route4Me SDK允许我做什么?

此SDK使您更容易使用Route4Me API。该API具有许多功能,包括路线优化,主要功能与创建订单以及为许多驾驶员创建优化顺序的行驶路线相关。

谁可以使用Route4Me SDK(和API)?

该服务通常由必须将许多驾驶员路线到许多目的地的组织使用。除了为新(未来)路线进行路线优化外,API还可以用于分析历史路线以及将路线分配给现场人员。

谁被禁止使用Route4Me SDK(和API)?

Route4Me SDK和API不能被转售或用于与Route4Me直接竞争的产品或系统。这意味着开发人员不能将路线优化服务转售给其他企业或开发人员。然而,开发人员可以将我们的路线优化SDK/API集成到他们的软件应用程序中。开发人员和初创公司也被允许将我们的软件用于内部目的(即当日交付初创公司)。

API/SDK集成是如何工作的?

Route4Me客户、集成商或合作伙伴将Route4Me SDK或API集成到其代码库中。Route4Me允许任何付费订阅者使用API与其系统的每个部分进行交互。该API是RESTful的,这意味着它是基于Web的,可以通过其他程序和机器访问。应使用API/SDK自动化路线规划过程或生成许多路线,而无需大量手动干预。

优化路线会自动出现在我的Route4Me账户中吗?

每个Route4Me SDK实例都需要一个唯一的API密钥。API密钥可以在Route4Me.com账户中的设置选项卡“API”中检索。当规划路线时,它将出现在相应的Route4Me账户中。由于Route4Me网络和移动账户是同步的,因此路线将同时出现在这两个环境中。

我可以使用其他地址测试SDK而无需有效的API密钥吗?

不可以。示例API密钥仅允许您使用SDK中包含的示例地址坐标优化路线。

SDK有速率限制吗?

您每秒可以发出的请求数量受您当前订阅计划限制。通常,这些核心功能有不同的速率限制:地址地理编码 & 地址反向地理编码 路线优化 & 管理 查看路线

Route4Me SDK推荐的集成架构是什么?

我们推荐两种典型的集成策略。使用此SDK,您可以发出优化请求,然后SDK轮询Route4Me API以检测优化过程中的状态变化。或者,您可以提供webhook回调URL,每当发生状态变化时,API都会通知该回调URL。

我不需要路线管理或移动功能。我能否只使用路线规划和路线优化API?

使用Web界面或移动应用程序查看您的优化路线无需额外费用,这意味着您只需使用API,无需为我们的Web应用程序或移动应用程序支付额外费用。

Route4Me优化Web服务有多快?

大多数具有不到200个目的地的路线在1秒或更短时间内完成优化。较大的路线(具有数千个停靠点)被分成最合理的地理区域,然后这些区域中的每个区域都独立并行优化。无论您使用轮询还是推送,您都将能够检索从大型优化问题集中创建的所有已优化的路线。

在规划路线时,我可以禁用优化吗?

是的。如果您想方便地在地图上查看它们或按您喜欢的顺序分发给您的司机,则可以发送已禁用优化的路线。

API可以用于无人机或自动驾驶汽车等空中车辆吗?

是的。API可以接受每个目的地的经纬度和无限量的元数据(例如高度、重量、件数、体积),API将元数据作为透传数据保留,以便在API调用设备上的webhook回调时,接收服务或设备可以访问关键数据。

所有优化路线都永久存储在Route4Me数据库中吗?

是的。除非您的合同另有规定,否则所有路线都永久存储在数据库中,并且在您的订阅终止后不再对您可用。Route4Me根据您的订阅计划自动修剪路线数据,通常较昂贵的计划允许更长的存档期。

我可以将您的API集成到需要路由、导航或路线规划的移动应用程序中吗?

Route4Me的路线规划和优化技术只能添加到不直接与Route4Me竞争的应用程序中。这意味着应用程序的主要功能必须与路线优化、路线规划或导航无关。

我可以支付您开发自定义算法吗?

是的

我可以使用您的API并将其转售给我的客户吗?

进行Route4Me的白色标签化和私有标签化是可能的,但根据客户数量、路线数量以及Route4Me应向您的客户提供的服务水平,交易的许可条款可能会有很大差异。

API/SDK具有TMS或EDI或EDI翻译功能吗?

是的

API/SDK可以使用回调、通知、推送或webhook将通知发送回我们的系统吗?

由于Route4Me异步处理所有路线,当路线优化作业在优化的每个状态通过时,Route4Me将立即通知您指定的端点。路线优化过程的每个阶段都有一个唯一的阶段ID。

Route4Me API和SDK在我的国家/地区工作吗?

Route4Me.com以及所有Route4Me的移动应用程序都使用Route4Me SDK和API。由于Route4Me在全球范围内工作,这意味着几乎在所有具有高度数字化地图的国家/地区都可以使用SDK的功能。

Route4Me API/SDK在我的Linux/*Nix/Kubernetes/Docker、Windows、Mac程序中工作吗?

鼓励客户选择他们偏好的操作系统环境。Route4Me API/SDK 可在支持客户偏好的编程语言的任何操作系统上运行。目前,几乎所有受支持的 SDK 都可以在任何操作系统上运行。

Route4Me API/SDK 是否要求我购买自己的服务器?

Route4Me 拥有自己的计算基础设施,您可以通过 API 和 SDK 访问。通常,客户需要在自己的计算机和/或服务器上运行 SDK 代码来访问此基础设施。

Route4Me 有本地解决方案吗?

Route4Me 目前不租赁或销售服务器,也没有本地设备解决方案。这种情况仅在极其特殊的情况下才可能发生。

Route4Me API/SDK 是否要求我拥有自己的程序员?

集成 SDK 所需的时间可能短至1小时,也可能长达几周,具体取决于客户应用程序中要集成的功能数量以及客户进行的集成测试量。当通过 API 访问 Route4Me 的技术时,几乎总是需要程序员的参与。

安装和用法

设置

在 composer.json 中设置

{
    "require": {
        "route4me/route4me-php": "~1.1.0"
    }
}

现在在项目根目录下执行依赖管理器(https://getcomposer.org.cn/download/

php composer.phar install

示例

单司机路线优化

Route4Me\Route4Me::setApiKey('11111111111111111111111111111111');

$addresses = array();
$addresses[] = Route4Me\Address::fromArray(array(
    "lng"         => -85.757308,
    "lat"         => 38.251698,
    "is_depot"    => true,
    "time"        => 300,
    "sequence_no" => 0,
    "address"     => "455 S 4th St, Louisville, KY 40202"
));

$addresses[] = Route4Me\Address::fromArray(array(
    "lng"         => -85.793846,
    "lat"         => 38.141598,
    "is_depot"    => false,
    "time"        => 300,
    "sequence_no" => 1,
    "address"     => "1604 PARKRIDGE PKWY, Louisville, KY, 40214"
));

$addresses[] = Route4Me\Address::fromArray(array(
    "lng"         => -85.786514,
    "lat"         => 38.202496,
    "is_depot"    => false,
    "time"        => 300,
    "sequence_no" => 2,
    "address"     => "1407 MCCOY, Louisville, KY, 40215"
));

$addresses[] = Route4Me\Address::fromArray(array(
    "lng"         => -85.774864,
    "lat"         => 38.178844,
    "is_depot"    => false,
    "time"        => 300,
    "sequence_no" => 3,
    "address"     => "4805 BELLEVUE AVE, Louisville, KY, 40215"
));

$parameters = Route4Me\RouteParameters::fromArray(array(
    "algorithm_type"          => Route4Me\Enum\AlgorithmType::TSP,
    "distance_unit"           => Route4Me\Enum\DistanceUnit::MILES,
    "device_type"             => Route4Me\Enum\DeviceType::WEB,
    "optimize"                => Route4Me\Enum\OptimizationType::DISTANCE,
    "travel_mode"             => Route4Me\Enum\TravelMode::DRIVING,
    "route_max_duration"      => 86400,
    "store_route"             => true,
    "vehicle_capacity"        => 1,
    "vehicle_max_distance_mi" => 10000
));

$optimizationParams = new Route4Me\OptimizationProblemParams;
$optimizationParams->setAddresses($addresses);
$optimizationParams->setParameters($parameters);

$problem = Route4Me\OptimizationProblem::optimize($optimizationParams);

var_dump($problem);

多个仓库多司机路线优化

Route4Me\Route4Me::setApiKey('11111111111111111111111111111111');

// Huge list of addresses
$json = json_decode(file_get_contents('./examples/addresses.json'), true);

$addresses = array();
foreach($json as $address) {
    $addresses[] = Address::fromArray($address);
}

$parameters = Route4Me\RouteParameters::fromArray(array(
    "algorithm_type"          => Route4Me\Enum\AlgorithmType::CVRP_TW_MD,
    "distance_unit"           => Route4Me\Enum\DistanceUnit::MILES,
    "device_type"             => Route4Me\Enum\DeviceType::WEB,
    "optimize"                => Route4Me\Enum\OptimizationType::DISTANCE,
    "travel_mode"             => Route4Me\Enum\TravelMode::DRIVING,
    "route_max_duration"      => 86400,
    "store_route"             => true,
    "vehicle_capacity"        => 50,
    "vehicle_max_distance_mi" => 10000,
    "parts"                   => 50
));

$optimizationParams = new Route4Me\OptimizationProblemParams;
$optimizationParams->setAddresses($addresses);
$optimizationParams->setParameters($parameters);

$problem = Route4Me\OptimizationProblem::optimize($optimizationParams);

var_dump($problem);

测试

./vendor/bin/phpunit