Vzdialenosť a čas presunu
distance() meria vždy z jedného východiska. Pre jednu Location vráti Distance. Pre MultipleLocations vráti MultipleDistances: samostatnú cestu z východiska do každého cieľa — nie reťaz úsekov, preto žiadny súčet neexistuje. Spôsob dopravy zvolíte enumom TravelMode:
use RoundlyConsulting\GooglePlaces\DataTransferObjects\DistanceQuery;
use RoundlyConsulting\GooglePlaces\DataTransferObjects\Location;
use RoundlyConsulting\GooglePlaces\DataTransferObjects\MultipleLocations;
use RoundlyConsulting\GooglePlaces\Enums\TravelMode;
use RoundlyConsulting\GooglePlaces\Facades\GooglePlaces;
$distance = GooglePlaces::distance(new DistanceQuery(
from: new Location(48.1486, 17.1077), // Bratislava
to: new Location(48.2082, 16.3738), // Vienna
type: TravelMode::Driving, // Driving | Walking | Bicycling | Transit
departureAt: now()->addHour(), // optional; enables traffic-aware driving ETAs
));
echo $distance->humanReadableDistance; // e.g. "79.8 km" (formatted by the package)
echo $distance->distanceInMeters; // e.g. 79800
echo $distance->humanReadableDuration; // e.g. "1h 5m"
echo $distance->durationInSeconds; // e.g. 3900
echo $distance->type->value; // "driving"
// One origin, several destinations → MultipleDistances, in destination order:
$fromBratislava = GooglePlaces::distance(new DistanceQuery(
from: new Location(48.1486, 17.1077),
to: new MultipleLocations([
new Location(48.2082, 16.3738), // Vienna
new Location(50.0755, 14.4378), // Prague
]),
));
foreach ($fromBratislava->distances as $i => $trip) {
echo "Bratislava → destination {$i}: {$trip->humanReadableDistance}";
}MultipleDistances->distances obsahuje jednu Distance pre každý cieľ v poradí, v akom ste ich zadali, a ->type nesie spôsob dopravy. MultipleLocations s jediným prvkom vráti obyčajnú Distance. Pre viac východísk naraz použite matrix() — pozrite Matica vzdialeností. Cieľ bez dostupnej trasy vyhodí PlacesException.
Fluentné dopyty
DistanceQuery je nemenný a fluentný — spôsob dopravy či čas odchodu zmeníte bez skladania nanovo:
$query = (new DistanceQuery(new Location(48.1486, 17.1077), new Location(48.2082, 16.3738)))
->transit() // or ->driving() / ->walking() / ->bicycling()
->departingAt(now()->addMinutes(30));
$distance = GooglePlaces::distance($query); // single destination → Distance
$distance->isDriving(); // false
$distance->isWalking(); // falseČas odchodu sa posiela pri každom spôsobe dopravy; pri jazde autom navyše zapne smerovanie s ohľadom na aktuálnu premávku.
Čitateľné hodnoty
Routes API nevracia čitateľné reťazce, preto humanReadableDistance (kilometre zaokrúhlené na jedno desatinné miesto) a humanReadableDuration (krátky interval ako „3h 20m“) formátuje balík. Surové distanceInMeters a durationInSeconds máte vždy k dispozícii pre vlastné formátovanie.
Enum TravelMode
TravelMode nesie hodnotu pre Routes API a pomocné metódy z enums-for-laravel — praktické pre výber spôsobu dopravy vo formulári:
use RoundlyConsulting\GooglePlaces\Enums\TravelMode;
TravelMode::Walking->routesValue(); // "WALK" — the Routes API value
TravelMode::values(); // Collection: driving, walking, bicycling, transit
TravelMode::Transit->readable(); // "Transit"
TravelMode::options(); // {value, label, name} options for a select
TravelMode::validationRule(); // "in:driving,walking,bicycling,transit"
$request->validate(['mode' => ['required', TravelMode::validationRule()]]);
$query = $query->travellingBy(TravelMode::from($request->input('mode')));Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.