cmtracker/src/Libs/Libs.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;
}
}