/**
  * @param FullPlaceResult $place
  * @return Address
  *
  * @throws UnresolvedGeonameException
  */
 public function createFromFullPlaceResult(FullPlaceResult $place)
 {
     $address = new Address();
     $address->setCity($place->getCity());
     $address->setLat($place->getLatitude());
     $address->setLng($place->getLongitude());
     $address->setCountry($place->getCountry());
     $address->setCountryCode($place->getCountryCode());
     $address->setFormattedAddress($place->getFormattedAddress());
     $address->setRegion($place->getRegion());
     $address->setRegionCode($place->getRegionCode());
     $address->setCounty($place->getCounty());
     $address->setCountyCode($place->getCountyCode());
     $address->setCity($place->getCity());
     $address->setPostalCode($place->getPostalCode());
     $address->setStreetName($place->getStreetName());
     $address->setStreetNumber($place->getStreetNumber());
     $geoname = $this->geonameRepository->getOneByAddress($address);
     $address->setGeoname($geoname);
     return $address;
 }
 /**
  * @param FullPlaceResult $place
  * @param array           $addressesData
  */
 protected function setAddress(FullPlaceResult $place, $addressesData)
 {
     $streetName = '';
     $streetNumber = null;
     $premiseComponents = array();
     foreach ($addressesData as $data) {
         if (in_array('street_number', $data['types'])) {
             $place->setStreetNumber($data['long_name']);
             $streetNumber = $data['long_name'];
         } elseif (in_array('premise', $data['types'])) {
             $premiseComponents[] = $data['long_name'];
         } elseif (in_array('subpremise', $data['types'])) {
             $premiseComponents[] = $data['long_name'];
         } elseif (in_array('route', $data['types'])) {
             $place->setStreetName($data['long_name']);
             $streetName = $data['long_name'];
         } elseif (in_array('locality', $data['types'])) {
             $place->setCity($data['long_name']);
         } elseif (in_array('country', $data['types'])) {
             $place->setCountry($data['long_name']);
             $place->setCountryCode($data['short_name']);
         } elseif (in_array('postal_code', $data['types'])) {
             $place->setPostalCode($data['long_name']);
         } elseif (in_array('administrative_area_level_1', $data['types'])) {
             $place->setRegion($data['long_name']);
             $place->setRegionCode($data['short_name']);
         } elseif (in_array('administrative_area_level_2', $data['types'])) {
             $place->setCounty($data['long_name']);
             $place->setCountyCode($data['short_name']);
         }
     }
     if ($streetNumber !== null && count($premiseComponents) > 0) {
         $formattedAddress = sprintf('%s - %s, %s', implode(' ', $premiseComponents), $streetNumber, $streetName);
     } else {
         if (count($premiseComponents) > 0) {
             $formattedAddress = sprintf('%s, %s', implode(' ', $premiseComponents), $streetName);
         } else {
             if ($streetNumber !== null) {
                 $formattedAddress = $streetNumber . ', ' . $streetName;
             } else {
                 $formattedAddress = $streetName;
             }
         }
     }
     $place->setFormattedAddress($formattedAddress);
 }