65 lines
2.0 KiB
PHP
65 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Libs;
|
|
|
|
use App\Entity\Location;
|
|
|
|
class Libs
|
|
{
|
|
public static function getLatLonFromGeoapify($address): ?array
|
|
{
|
|
$address = urlencode($address);
|
|
$url = "https://api.geoapify.com/v1/geocode/search?text={$address}&format=json&apiKey={$_ENV['GEOAPIFY_API_KEY']}";
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
|
$result = curl_exec($ch);
|
|
curl_close($ch);
|
|
$result = json_decode($result, true);
|
|
if (isset($result['results'][0]['lat']) && isset($result['results'][0]['lon'])) {
|
|
$lat = $result['results'][0]['lat'];
|
|
$lon = $result['results'][0]['lon'];
|
|
return [number_format($lat, 6), number_format($lon, 6)];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static function getRoute($lat1, $lon1, $lat2, $lon2): ?Route
|
|
{
|
|
$params = [
|
|
'waypoints' => "{$lat1},{$lon1}|{$lat2},{$lon2}",
|
|
'mode' => 'drive',
|
|
'units' => 'imperial',
|
|
'format' => 'json',
|
|
'apiKey' => $_ENV['GEOAPIFY_API_KEY']
|
|
];
|
|
|
|
$url = "https://api.geoapify.com/v1/routing?".http_build_query($params);
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
|
$result = curl_exec($ch);
|
|
curl_close($ch);
|
|
$route = new Route(json_decode($result));
|
|
|
|
if (is_a($route, Route::class)) {
|
|
return $route;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static function getRouteDistance(Location $origin, Location $destination): ?Route
|
|
{
|
|
$route = self::getRoute($origin->getLat(), $origin->getLon(), $destination->getLat(), $destination->getLon());
|
|
if ($route) {
|
|
return $route;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|