2014-12-21 3 views
7

Ich muss alle Daten aus der Tabelle, die Breiten/Längenwerte hat zu holen. Tatsächlich habe ich nur alle Breiten/Längen Werte, die innerhalb von 1000 ist Meilen von einer Quelle, also für das ich Konzept verwenden & es Berechnung der Breiten/Längen richtig, aber wenn ich eine Suchabfrage erschaffe Daten zu holen, welche table.latitudes < = Breiten Nord- und table.latitudes> = Breite SüdWie finden Sie alle Abfrage in CakePHP Bedingungen mit größer als und kleiner als gleich einem Wert

hat

Ähnlich für Längen.

Ich habe diese Berechnung Code & Fund Abfrage gemacht

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

Ich habe geprüft Errechneter Wert ($ Latn, $ lone) seine Angabe Ergebnis aber finden alle Abfrage nicht funktioniert.

Bitte helfen Sie mir, wo ich falsch liege.

+0

"_Doesn't work_" ist der Trick nicht eine richtige Beschreibung des Problems. – ndm

+0

Tipp: Wenn Sie das Rad nicht neu erfinden wollen, können Sie hier ein einfach zu integrierendes [Verhalten] (http://www.dereuromark.de/2012/06/12/geocoding-with-cakephp/) verwenden: '$ this-> setDistanceAsVirtualField ($ lat, $ lng);' und es wird funktionieren, bis die Box. Sie können das Verhalten auch verwenden, um zu erfahren, wie eine solche Abfrage erstellt wird. – mark

Antwort

6

Dies könnte

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