Vzdialenosť a matica
distance() hľadá v pipeline DistanceProvider — v základe Google — a vráti Distance, alebo null, ak dopyt nikto nevie vyriešiť (nedostupný poskytovateľ sa preskočí):
use RoundlyConsulting\Geolocation\DataTransferObjects\Coordinates;
use RoundlyConsulting\Geolocation\DataTransferObjects\DistanceQuery;
use RoundlyConsulting\Geolocation\Enum\DistanceType;
use RoundlyConsulting\Geolocation\Facades\Geolocation;
$distance = Geolocation::distance(
DistanceQuery::between(
from: new Coordinates(48.1482, 17.1067),
to: new Coordinates(49.2000, 16.6068),
type: DistanceType::Driving,
),
);
$distance?->humanReadableDistance; // "133 km"
$distance?->distanceInMeters; // 133000
$distance?->durationInSeconds; // 5400// Skip the query object — distanceBetween() builds it for you (driving by default)
$distance = Geolocation::distanceBetween(
new Coordinates(48.1482, 17.1067),
new Coordinates(49.2000, 16.6068),
DistanceType::Walking,
);Objekt Distance
| Vlastnosť | Typ | Obsah |
|---|---|---|
humanReadableDistance | string | Vzdialenosť naformátovaná poskytovateľom, napr. „133 km“. |
distanceInMeters | int | Vzdialenosť v metroch. |
humanReadableDuration | string | Čas cesty naformátovaný poskytovateľom. |
durationInSeconds | int | Čas cesty v sekundách. |
type | DistanceType | Walking alebo Driving. |
Spôsob dopravy z formulára
Vďaka validationRule() z DistanceType môžete spôsob dopravy bezpečne prijať z formulára:
$data = $request->validate([
'mode' => ['required', DistanceType::validationRule()], // 'in:Walking,Driving'
]);
$distance = Geolocation::distance(DistanceQuery::between(
from: new Coordinates(48.1482, 17.1067),
to: new Coordinates(48.1486, 17.1077),
type: DistanceType::from($data['mode']),
));
$distance?->humanReadableDuration; // e.g. "6 mins"Matica vzdialeností
Určte mriežku vzdialeností medzi viacerými východiskami a cieľmi jedným volaním Distance Matrix. Nedostupné úseky sa zmenia na null, a keď sa Google nedá dosiahnuť, aj každá bunka:
use RoundlyConsulting\Geolocation\DataTransferObjects\Coordinates;
use RoundlyConsulting\Geolocation\Enum\DistanceType;
$matrix = Geolocation::distanceMatrix(
origins: [new Coordinates(48.14, 17.10)],
destinations: [new Coordinates(49.20, 16.60), new Coordinates(50.07, 14.43)],
type: DistanceType::Driving, // optional — Driving is the default
);
$matrix->get(0, 1)?->distanceInMeters; // origin 0 → destination 1, null when that leg is unavailable
$matrix->origins; // list<Coordinates>
$matrix->rows; // array<int, array<int, Distance|null>>Maticu počíta pribalený poskytovateľ Google. Ak Google nie je v (zúženej) pipeline alebo požiadavka zlyhá, dostanete prázdnu mriežku, v ktorej každé get() vráti null. Matice sa necachujú a neodosielajú udalosti.
Priamu vzdušnú vzdialenosť bez volania API získate cez Coordinates::distanceTo().
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.