NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Google Places for Laravel

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 kryptomien

Odoslaní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.