Я использую Codeigniter для проекта и имею некоторые местоположения с широтно-долготными входами в базе данных. Я пытаюсь получить очки на определенном расстоянии (50 км) и пробовать его с Формулой Хаверсина. Однако на моем контроллере и просмотре он не распечатывает результаты. Я должен знать, есть ли какие-либо корректировки, которые мне нужно сделать, чтобы заставить работу модели работать.
Примечание. Таблица DB имеет имена столбцов location_latitude и location_longitude.
//base function to compare distance with $setlat = 13.5234412; $setlong = 144.8320897; //query with Haversin formula $awaka = "SELECT 'location_id', ( 3959 * acos( cos( radians(?) ) * cos( radians('location_latitude') ) * cos( radians('location_longitude') - radians(?) ) + sin( radians(?) ) * sin( radians('location_latitude') ) ) ) AS 'distance' FROM 'locations' HAVING 'distance < 5'"; $result = $this->db->query($awaka, array($setlat, $setlong, $setlat)); echo $result;
Похоже, вы немного подстроились по формуле Хаверсина. Вы переключили $setlong
и location_longitude
в третий cosine
термин. Я переключил их, чтобы получить следующее:
$setlat = 13.5234412; $setlong = 144.8320897; $awaka = "SELECT 'location_id', ( 3959 * acos( cos( radians(?) ) * cos( radians('location_latitude') ) * cos( radians(?) - radians('location_longitude') ) + sin( radians(?) ) * sin( radians('location_latitude') ) ) ) AS 'distance' FROM 'locations' HAVING 'distance < 5'"; $result = $this->db->query($awaka, array($setlat, $setlong, $setlat)); echo $result;
Посмотрите на эту страницу , в которой показано, что вам нужно закодировать формулу Хаверсина, чтобы найти расстояние между двумя точками.
Это активные записи, которые помогут вам работать для меня.
$this->db->select("location_id,round((6371 * acos(cos(radians($setlat)) * cos(radians(location_latitude)) * cos(radians('$setlong') - radians(location_longitude)) + sin(radians('$setlat')) * sin(radians(location_latitude)))),2) AS distance", false); $this->db->having('distance < 5', false); $data = $this->db->get('locations')->result_array(); return $data;