123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- declare(strict_types=1);
- /*
- * This file is part of the Geocoder package.
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @license MIT License
- */
- namespace Geocoder;
- use Geocoder\Model\Bounds;
- use Geocoder\Query\GeocodeQuery;
- use Geocoder\Query\ReverseQuery;
- use Geocoder\Provider\Provider;
- /**
- * @author Tobias Nyholm <tobias.nyholm@gmail.com>
- */
- final class StatefulGeocoder implements Geocoder
- {
- /**
- * @var string|null
- */
- private $locale;
- /**
- * @var Bounds
- */
- private $bounds;
- /**
- * @var int
- */
- private $limit;
- /**
- * @var Provider
- */
- private $provider;
- /**
- * @param Provider $provider
- * @param string $locale
- */
- public function __construct(Provider $provider, string $locale = null)
- {
- $this->provider = $provider;
- $this->locale = $locale;
- $this->limit = Geocoder::DEFAULT_RESULT_LIMIT;
- }
- /**
- * {@inheritdoc}
- */
- public function geocode(string $value): Collection
- {
- $query = GeocodeQuery::create($value)
- ->withLimit($this->limit);
- if (null !== $this->locale && '' !== $this->locale) {
- $query = $query->withLocale($this->locale);
- }
- if (!empty($this->bounds)) {
- $query = $query->withBounds($this->bounds);
- }
- return $this->provider->geocodeQuery($query);
- }
- /**
- * {@inheritdoc}
- */
- public function reverse(float $latitude, float $longitude): Collection
- {
- $query = ReverseQuery::fromCoordinates($latitude, $longitude)
- ->withLimit($this->limit);
- if (null !== $this->locale && '' !== $this->locale) {
- $query = $query->withLocale($this->locale);
- }
- return $this->provider->reverseQuery($query);
- }
- /**
- * {@inheritdoc}
- */
- public function geocodeQuery(GeocodeQuery $query): Collection
- {
- $locale = $query->getLocale();
- if ((null === $locale || '' === $locale) && null !== $this->locale) {
- $query = $query->withLocale($this->locale);
- }
- $bounds = $query->getBounds();
- if (empty($bounds) && null !== $this->bounds) {
- $query = $query->withBounds($this->bounds);
- }
- return $this->provider->geocodeQuery($query);
- }
- /**
- * {@inheritdoc}
- */
- public function reverseQuery(ReverseQuery $query): Collection
- {
- $locale = $query->getLocale();
- if ((null === $locale || '' === $locale) && null !== $this->locale) {
- $query = $query->withLocale($this->locale);
- }
- return $this->provider->reverseQuery($query);
- }
- /**
- * @param string $locale
- *
- * @return StatefulGeocoder
- */
- public function setLocale(string $locale): self
- {
- $this->locale = $locale;
- return $this;
- }
- /**
- * @param Bounds $bounds
- *
- * @return StatefulGeocoder
- */
- public function setBounds(Bounds $bounds): self
- {
- $this->bounds = $bounds;
- return $this;
- }
- /**
- * @param int $limit
- *
- * @return StatefulGeocoder
- */
- public function setLimit(int $limit): self
- {
- $this->limit = $limit;
- return $this;
- }
- /**
- * {@inheritdoc}
- */
- public function getName(): string
- {
- return 'stateful_geocoder';
- }
- }
|