2014-12-21 14 views
7

Muszę pobrać wszystkie dane z tabeli, która ma wartości szerokości/długości geograficznej. Po prostu potrzebowałem wszystkich wartości szerokości/długości, które mieszczą się w granicach 1000 mil od źródła, więc do tego użyłem pojęcia & to obliczenie szerokości/długości geograficzne prawidłowo ale gdy tworzę zapytanie find do przechwycenia danych, które ma table.latitudes < = szerokościach geograficznych na północ i na table.latitudes> = szerokościach SouthJak znaleźć wszystkie zapytania w warunkach cakephp o wartościach większych niż i mniejszych niż wartości

Podobnie dla długości.

Zrobiłem te kodu kalkulacja & find zapytanie

$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)); 

mam sprawdzone wartości obliczonej ($, $ latN Lone) jego dając wynik, ale znaleźć wszystko kwerenda nie działa.

Proszę mi pomóc, gdzie idę źle.

+0

"_Doesn't work_" nie jest właściwy opis problemu. – ndm

+0

Wskazówka: Jeśli nie chcesz odkrywać koła na nowo, możesz użyć łatwego do zintegrowania [zachowania] (http://www.dereuromark.de/2012/06/12/geocoding-with-cakephp/) tutaj: '$ this-> setDistanceAsVirtualField ($ lat, $ lng);' i będzie działało w tym polu. Możesz także użyć tego zachowania, aby dowiedzieć się, jak zbudować takie zapytanie. – mark

Odpowiedz

6

Może to rade

$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))); 
Powiązane problemy