📜  laravel 计算距离 lat longtidue - PHP (1)

📅  最后修改于: 2023-12-03 15:02:38.309000             🧑  作者: Mango

Laravel 计算距离 (latitude, longitude)

在开发一个针对位置的应用时,计算两个地点之间的距离是常见的需求。本文介绍了如何在 Laravel 中使用 PHP 来计算两个地点之间的距离。

步骤
1. 安装 Laravel

如果你已经安装了 Laravel,则可以跳过此步骤。否则,可以通过以下命令在命令行中安装:

composer create-project --prefer-dist laravel/laravel project-name
2. 安装依赖库

在 Laravel 项目中,我们可以使用 GuzzleHttpPHP cURL 来进行 HTTP 请求。

我们将使用 GuzzleHttp,先使用以下命令来安装依赖库:

composer require guzzlehttp/guzzle
3. 编写代码

在 app 目录下新建一个名为 LocationService.php 的类,其中 _getDistance() 方法是用来计算两个地点之间的距离的。

use GuzzleHttp\Client;

class LocationService
{
    private $client;
    private $baseUrl = 'https://maps.googleapis.com/maps/api/distancematrix/json';

    public function __construct(Client $client)
    {
        $this->client = $client;
    }

    public function getDistance($origin, $destination)
    {
        $response = $this->client->get($this->baseUrl, [
            'query' => [
                'origins' => $origin,
                'destinations' => $destination,
                'key' => config('services.google_maps.key')
            ]
        ]);

        $distance = json_decode($response->getBody()->getContents())->rows[0]->elements[0]->distance->value;

        return $distance;
    }
}

在上面的代码中,我们把 Google Maps API 的基本 URL 赋值给 $baseUrl,接着通过 GuzzleHttp 发送 HTTP 请求,计算出两个地址之间的距离,最后返回距离的值。

4. 测试

routes/web.php 文件中,添加以下代码来测试上面所编写的代码:

use App\Services\LocationService;

Route::get('/distance', function (LocationService $locationService) {
    $origin = 'Chinatown, San Francisco, CA';
    $destination = 'Golden Gate Bridge, San Francisco, CA';
    $distance = $locationService->getDistance($origin, $destination);

    return 'The distance between ' . $origin . ' and ' . $destination . ' is ' . number_format($distance / 1000, 2) . ' kilometers.';
});

这里我们使用了两个地址通过 LocationService 类来计算它们之间的距离,并把结果输出到浏览器中。

5. 运行

现在,我们可以使用以下命令运行我们的代码:

php artisan serve

在浏览器中打开 http://localhost:8000/distance,你应该能看到以下显示结果:

The distance between Chinatown, San Francisco, CA and Golden Gate Bridge, San Francisco, CA is 7.16 kilometers.
结论

Laravel 提供了方便的方法来计算两个地点之间的距离。在这篇文章中,我们使用了 Google Maps API,GuzzleHttp 来计算两个位置之间的距离。这个例子可以扩展到一个更完整的位置应用程序的开发中。