2016-03-29 5 views
3

Ich möchte jeden Ort innerhalb von 10 km suchen. mit lat und lang. Wie kann ich ein Limit setzen? Hier ist meine SQL-Abfrage:Finden Sie Entfernung mit Lat und Long in Sql

$this->db->select(", (6371 acos(cos(radians(37)) cos(radians(latitude)) cos(radians(longtitude)- radians($lng)) + sin(radians($lat)) * sin(radians(latitude)))) AS distance");       
$this->db->from('table_name'); 
$this->db->order_by('distance'); 
+0

Haben Sie einen Fehler hat? – Sadikhasan

+0

$ this-> db-> having ('Abstand <10'); Angenommen, Ihre Select-Anweisung ist korrekt und gibt Ihnen Entfernung in km – shantanu

+0

Wo meine Formel <10. Sie können ein begrenzendes Rechteck (gut, ein Quadrat) von 20x20 verwenden, um die Ergebnisse schnell zu filtern – Strawberry

Antwort

0
Try this: 
$this->db->select(", (6371 acos(cos(radians(37)) cos(radians(latitude)) cos(radians(longtitude)- radians($lng)) + sin(radians($lat)) * sin(radians(latitude)))) AS distance");       
$this->db->from('table_name'); 
$this->db->having('distance<',10) 
$this->db->order_by('distance'); 
+0

immer noch nicht bin Ergebnis in km. – Ritu

+0

was meinst du mit nicht in Kms bekommen? Erhalten Sie irgendwelche Ergebnisse oder Fehler? – Thejas

+0

Ich bekomme Ergebnis, aber bekommen falsches Ergebnis, tatsächlich mit oben Abfrage ich bekomme einige Datensätze mit Abstand Feld, und in der Ferne eingereicht ich Wert wie "2181". und das Abrufen der Abfrage mit diesem Feld. bedeutet, wenn ich "distance <10" verwende, dann wird nichts angezeigt, und wenn ich "distance <2181" verwende, wird ein Ergebnis angezeigt. aber ich möchte Ergebnis in km oder Meilen suchen. – Ritu

3

Try this:

$this->db->query(' SELECT (6371 * acos(cos(radians(37)) cos(radians(latitude)) cos(radians(longtitude)- radians("'.$lng.'")) + sin(radians("'.$lat.'")) * sin(radians(latitude)))) AS distance 
         FROM table_name 
         HAVING distance < 10 
         ORDER BY distance ASC'); 
0
$sql = 'select *,(((acos(sin(('.$lat.'*pi()/180)) * 
      sin((loc_LAT_centroid*pi()/180))+cos(('.$lat.'*pi()/180)) * 
      cos((loc_LAT_centroid*pi()/180)) * cos((('.$lang.'-loc_LONG_centroid)* 
      pi()/180))))*180/pi())*60*1.1515 
     ) AS distance from table_name order by distance'; 

$lat = latitude of your current location 
$lang = longitude of your current location 

loc_LAT_centroid = field name of your table where you store the latitude of the places. 
loc_LONG_centroid = field name of your table where you store the longitude of the places. 
Verwandte Themen