/**
  * @param Address $address
  * @param string  $precision
  *
  * @return bool
  */
 public function isAccurate(Address $address, $precision)
 {
     if ($precision === GeocodePrecision::COUNTRY && is_null($address->getCountry())) {
         return false;
     } else {
         if ($precision === GeocodePrecision::CITY && is_null($address->getCity())) {
             return false;
         } else {
             if ($precision === GeocodePrecision::STREET_NAME && is_null($address->getStreetName())) {
                 return false;
             } else {
                 if ($precision === GeocodePrecision::STREET_NUMBER && is_null($address->getStreetNumber())) {
                     return false;
                 }
             }
         }
     }
     return true;
 }
 /**
  * @param Address $address
  *
  * @return mixed
  * @throws UnresolvedGeonameException
  */
 public function getOneByAddressTranslation(Address $address)
 {
     $queryBuilder = $this->getEntityManager()->createQueryBuilder()->select('g')->addSelect('DISTANCE(g.lat,g.lng,:lat,:lng) AS HIDDEN distance')->from(Geoname::SHORTCUT_CLASS_NAME, 'g')->leftJoin('g.translations', 't')->where('t.alternateName = :alternateName')->having('distance < 1')->setParameter('lat', $address->getLat())->setParameter('lng', $address->getLng())->setParameter('alternateName', $address->getCity());
     $query = $queryBuilder->getQuery();
     try {
         return $query->getSingleResult();
     } catch (NoResultException $e) {
         return $this->getNearestCity($address);
     } catch (NonUniqueResultException $e) {
         return $this->getNearestCity($address);
     }
 }