2022-04-27 11:30:43 +02:00

562 lines
9.8 KiB
PHP

<?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\Provider\GoogleMaps\Model;
use Geocoder\Model\Address;
use Geocoder\Model\AdminLevel;
use Geocoder\Model\AdminLevelCollection;
/**
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
final class GoogleAddress extends Address
{
/**
* @var string|null
*/
private $id;
/**
* @var string|null
*/
private $locationType;
/**
* @var array
*/
private $resultType = [];
/**
* @var string|null
*/
private $formattedAddress;
/**
* @var string|null
*/
private $streetAddress;
/**
* @var string|null
*/
private $intersection;
/**
* @var string|null
*/
private $postalCodeSuffix;
/**
* @var string|null
*/
private $political;
/**
* @var string|null
*/
private $colloquialArea;
/**
* @var string|null
*/
private $ward;
/**
* @var string|null
*/
private $neighborhood;
/**
* @var string|null
*/
private $premise;
/**
* @var string|null
*/
private $subpremise;
/**
* @var string|null
*/
private $naturalFeature;
/**
* @var string|null
*/
private $airport;
/**
* @var string|null
*/
private $park;
/**
* @var string|null
*/
private $pointOfInterest;
/**
* @var string|null
*/
private $establishment;
/**
* @var AdminLevelCollection
*/
private $subLocalityLevels;
/**
* @var bool
*/
private $partialMatch;
/**
* @param string|null $id
*
* @return GoogleAddress
*/
public function withId(string $id = null)
{
$new = clone $this;
$new->id = $id;
return $new;
}
/**
* @see https://developers.google.com/places/place-id
*
* @return string|null
*/
public function getId()
{
return $this->id;
}
/**
* @param string|null $locationType
*
* @return GoogleAddress
*/
public function withLocationType(string $locationType = null)
{
$new = clone $this;
$new->locationType = $locationType;
return $new;
}
/**
* @return string|null
*/
public function getLocationType()
{
return $this->locationType;
}
/**
* @return array
*/
public function getResultType(): array
{
return $this->resultType;
}
/**
* @param array $resultType
*
* @return GoogleAddress
*/
public function withResultType(array $resultType)
{
$new = clone $this;
$new->resultType = $resultType;
return $new;
}
/**
* @return string|null
*/
public function getFormattedAddress()
{
return $this->formattedAddress;
}
/**
* @param string|null $formattedAddress
*
* @return GoogleAddress
*/
public function withFormattedAddress(string $formattedAddress = null)
{
$new = clone $this;
$new->formattedAddress = $formattedAddress;
return $new;
}
/**
* @return string|null
*/
public function getAirport()
{
return $this->airport;
}
/**
* @param string|null $airport
*
* @return GoogleAddress
*/
public function withAirport(string $airport = null)
{
$new = clone $this;
$new->airport = $airport;
return $new;
}
/**
* @return string|null
*/
public function getColloquialArea()
{
return $this->colloquialArea;
}
/**
* @param string|null $colloquialArea
*
* @return GoogleAddress
*/
public function withColloquialArea(string $colloquialArea = null)
{
$new = clone $this;
$new->colloquialArea = $colloquialArea;
return $new;
}
/**
* @return string|null
*/
public function getIntersection()
{
return $this->intersection;
}
/**
* @param string|null $intersection
*
* @return GoogleAddress
*/
public function withIntersection(string $intersection = null)
{
$new = clone $this;
$new->intersection = $intersection;
return $new;
}
/**
* @return string|null
*/
public function getPostalCodeSuffix()
{
return $this->postalCodeSuffix;
}
/**
* @param string|null $postalCodeSuffix
*
* @return GoogleAddress
*/
public function withPostalCodeSuffix(string $postalCodeSuffix = null)
{
$new = clone $this;
$new->postalCodeSuffix = $postalCodeSuffix;
return $new;
}
/**
* @return string|null
*/
public function getNaturalFeature()
{
return $this->naturalFeature;
}
/**
* @param string|null $naturalFeature
*
* @return GoogleAddress
*/
public function withNaturalFeature(string $naturalFeature = null)
{
$new = clone $this;
$new->naturalFeature = $naturalFeature;
return $new;
}
/**
* @return string|null
*/
public function getNeighborhood()
{
return $this->neighborhood;
}
/**
* @param string|null $neighborhood
*
* @return GoogleAddress
*/
public function withNeighborhood(string $neighborhood = null)
{
$new = clone $this;
$new->neighborhood = $neighborhood;
return $new;
}
/**
* @return string|null
*/
public function getPark()
{
return $this->park;
}
/**
* @param string|null $park
*
* @return GoogleAddress
*/
public function withPark(string $park = null)
{
$new = clone $this;
$new->park = $park;
return $new;
}
/**
* @return string|null
*/
public function getPointOfInterest()
{
return $this->pointOfInterest;
}
/**
* @param string|null $pointOfInterest
*
* @return GoogleAddress
*/
public function withPointOfInterest(string $pointOfInterest = null)
{
$new = clone $this;
$new->pointOfInterest = $pointOfInterest;
return $new;
}
/**
* @return string|null
*/
public function getPolitical()
{
return $this->political;
}
/**
* @param string|null $political
*
* @return GoogleAddress
*/
public function withPolitical(string $political = null)
{
$new = clone $this;
$new->political = $political;
return $new;
}
/**
* @return string|null
*/
public function getPremise()
{
return $this->premise;
}
/**
* @param string $premise
*
* @return GoogleAddress
*/
public function withPremise(string $premise = null)
{
$new = clone $this;
$new->premise = $premise;
return $new;
}
/**
* @return string|null
*/
public function getStreetAddress()
{
return $this->streetAddress;
}
/**
* @param string|null $streetAddress
*
* @return GoogleAddress
*/
public function withStreetAddress(string $streetAddress = null)
{
$new = clone $this;
$new->streetAddress = $streetAddress;
return $new;
}
/**
* @return string|null
*/
public function getSubpremise()
{
return $this->subpremise;
}
/**
* @param string|null $subpremise
*
* @return GoogleAddress
*/
public function withSubpremise(string $subpremise = null)
{
$new = clone $this;
$new->subpremise = $subpremise;
return $new;
}
/**
* @return string|null
*/
public function getWard()
{
return $this->ward;
}
/**
* @param string|null $ward
*
* @return GoogleAddress
*/
public function withWard(string $ward = null)
{
$new = clone $this;
$new->ward = $ward;
return $new;
}
/**
* @return string|null
*/
public function getEstablishment()
{
return $this->establishment;
}
/**
* @param string|null $establishment
*
* @return GoogleAddress
*/
public function withEstablishment(string $establishment = null)
{
$new = clone $this;
$new->establishment = $establishment;
return $new;
}
/**
* @return AdminLevelCollection
*/
public function getSubLocalityLevels()
{
return $this->subLocalityLevels;
}
/**
* @param array $subLocalityLevel
*
* @return $this
*/
public function withSubLocalityLevels(array $subLocalityLevel)
{
$subLocalityLevels = [];
foreach ($subLocalityLevel as $level) {
if (empty($level['level'])) {
continue;
}
$name = $level['name'] ?? $level['code'] ?? '';
if (empty($name)) {
continue;
}
$subLocalityLevels[] = new AdminLevel($level['level'], $name, $level['code'] ?? null);
}
$subLocalityLevels = array_unique($subLocalityLevels);
$new = clone $this;
$new->subLocalityLevels = new AdminLevelCollection($subLocalityLevels);
return $new;
}
/**
* @return bool
*/
public function isPartialMatch()
{
return $this->partialMatch;
}
/**
* @param bool $partialMatch
*
* @return $this
*/
public function withPartialMatch(bool $partialMatch)
{
$new = clone $this;
$new->partialMatch = $partialMatch;
return $new;
}
}