Exemplo n.º 1
0
 /**
  * @param string $address
  * @param array $params
  * @return \Geocoder\Model\AddressCollection
  */
 public function geocode($address, array $params = [])
 {
     $file = Inflector::slug($address) . '.txt';
     $testFiles = ROOT . DS . 'tests' . DS . 'test_files' . DS . 'Geocoder' . DS;
     $testFile = $testFiles . $file;
     if (!file_exists($testFile)) {
         if (getenv('CI')) {
             throw new Exception('Should not happen on CI.');
         }
         $addresses = parent::geocode($address, $params);
         file_put_contents($testFile, serialize($addresses));
     }
     $addresses = file_get_contents($testFile);
     $addresses = unserialize($addresses);
     return $addresses;
 }
Exemplo n.º 2
0
 /**
  * Uses the Geocode class to query
  *
  * @param string $address
  * @return \Geocoder\Model\Address|null
  */
 protected function _execute($address)
 {
     $this->_Geocoder = new Geocoder($this->_config);
     if ($this->config('cache')) {
         $GeocodedAddresses = TableRegistry::get('Geo.GeocodedAddresses');
         $result = $GeocodedAddresses->find()->where(['address' => $address])->first();
         if ($result) {
             return $result->data ?: null;
         }
     }
     try {
         $addresses = $this->_Geocoder->geocode($address);
     } catch (InconclusiveException $e) {
         $addresses = null;
     } catch (NotAccurateEnoughException $e) {
         $addresses = null;
     }
     $result = null;
     if ($addresses && $addresses->count() > 0) {
         $result = $addresses->first();
     }
     if ($this->config('cache')) {
         $addressEntity = $GeocodedAddresses->newEntity(['address' => $address]);
         if ($result) {
             $formatter = new StringFormatter();
             $addressEntity->formatted_address = $formatter->format($result, '%S %n, %z %L');
             $addressEntity->lat = $result->getLatitude();
             $addressEntity->lng = $result->getLongitude();
             $addressEntity->country = $result->getCountry()->getCode();
             $addressEntity->data = $result;
         }
         if (!$GeocodedAddresses->save($addressEntity, ['atomic' => false])) {
             throw new RuntimeException('Could not store geocoding cache data');
         }
     }
     return $result;
 }