【问题标题】:Codeigniter and SQL/Haversine FormulaCodeigniter 和 SQL/Haversine 公式
【发布时间】:2015-05-21 06:48:38
【问题描述】:

我在一个项目中使用 Codeigniter,并且在数据库中有一些带有纬度和经度输入的位置。我试图在一定距离(50 公里)内获得积分,并尝试使用 Haversine 公式。但是,在我的控制器上并查看它不会打印出结果。我需要知道的是是否需要进行任何调整才能使模型功能正常工作。

注意: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; 

【问题讨论】:

    标签: php sql codeigniter haversine


    【解决方案1】:

    看来您对 Haversine 公式有些误解。您在第三个 cosine 术语中切换了 $setlonglocation_longitude 术语。我换了他们来得到这个:

    $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 page,它表明您必须编写Haversine 公式才能找到两点之间的距离。

    【讨论】:

    • 经过一些调整后,这工作了。非常感谢!
    【解决方案2】:

    这是一个活动记录,可以帮助您,它对我有用。

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

    【讨论】:

    • 我有一个白屏。没有显示,将使用控制器进行调整。
    • 这是我得到的错误:致命错误:在非对象上调用成员函数 result_array()
    • 您使用的是活动记录还是简单查询
    • 我正在使用活动记录。
    • 而不是result_array() 只尝试result()
    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 2015-02-26
    • 2012-10-26
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多