2014-12-21 19 views
7

Devo recuperare tutti i dati dalla tabella che ha valori di latitudini/longitudini. In realtà ho solo richiesto tutti i valori di latitudini/longitudini che sono entro 1000 miglia da una fonte, Quindi, per questo ho usato il concetto & è calcolare latitudini/longitudini correttamente, ma quando sto creando una query di ricerca per recuperare i dati che ha table.latitudes < = latitudini nord e table.latitudes> = latitudini SudCome fare trovare tutte le query in condizioni cakephp con un valore maggiore o minore di un valore

Allo stesso modo per longitudini.

Ho fatto questi codice di calcolo di query & ritrovamento

$lat1 = $coodSearch['lat']; 
     $lon1 = $coodSearch['long']; 
     $d = $coodSearch['dis']; 
     $r = 3959;//earth's radius in miles 

      //compute max and min latitudes/longitudes for search square 
       $latN = rad2deg(asin(sin(deg2rad($lat1)) * cos($d/$r) + cos(deg2rad($lat1)) * sin($d/$r) * cos(deg2rad(0)))); 
       $latS = rad2deg(asin(sin(deg2rad($lat1)) * cos($d/$r) + cos(deg2rad($lat1)) * sin($d/$r) * cos(deg2rad(180)))); 
       $lonE = rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(90)) * sin($d/$r) * cos(deg2rad($lat1)), cos($d/$r) - sin(deg2rad($lat1)) * sin(deg2rad($latN)))); 
       $lonW = rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(270)) * sin($d/$r) * cos(deg2rad($lat1)), cos($d/$r) - sin(deg2rad($lat1)) * sin(deg2rad($latN)))); 

      $this->loadModel('City'); 
     $finder1 = array('and' => array('City.latitude <=' => $latN,'City.latitude >=' => $latS)); 
     $latArr = $this->City->find('all', array('conditions' => $finder1)); 
     $finder2 = array('and' => array('City.longitude >=' => $lonE,'City.longitude <=' => $lonW)); 
     $longArr = $this->City->find('all', array('conditions' => $finder2)); 

ho Valore calcolato controllato ($ Latn, $ Lone) relativo dare risultato, ma trovare tutte query non funziona.

Per favore aiutami dove sto andando male.

+0

"_Doesn't work_" non è una descrizione corretta problema. – ndm

+0

Suggerimento: se non si desidera reinventare la ruota, è possibile utilizzare un [comportamento] (http://www.dereuromark.de/2012/06/12/geocoding-with-cakephp/) facile da integrare qui: '$ this-> setDistanceAsVirtualField ($ lat, $ lng);' e funzionerà fuori dalla scatola. Puoi anche usare il comportamento per sapere come sarebbe costruita una tale query. – mark

risposta

6

Questo potrebbe fare il trucco

$data = $this->ModelName->find('all', array('conditions' => array('ModelName.DbColumn >=' => 10))); 
$data = $this->ModelName->find('all', array('conditions' => array('ModelName.DbColumn <=' => 10))); 
$data = $this->ModelName->find('all', array('conditions' => array('ModelName.DbColumn >=' => 10,'ModelName.DbColumn <=' => 20)));