Doctrine2中的地理位置查询

时间:2014-07-08 14:55:19

标签: mysql postgresql doctrine-orm geolocation codeigniter-2

我在我的测试应用程序中使用Doctrine2和CodeIgniter2。我的数据库中有一个表,用于存储所有具有字段的地理位置

  1. 名称
  2. 纬度
  3. 经度
  4. 创建日期(时间戳)
  5. 我看到用hasrsine公式选择位置的sql语句看起来像

    (as mentioned in another answer)

    SELECT id, 
    ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
    FROM markers 
    HAVING distance < 25 
    ORDER BY distance 
    LIMIT 0 , 20;
    

    现在我发现使用create query builder很难做到这一点。我不确定DQL或querybuilder是否支持三角函数。还有可能我的数据库将被迁移到postgre或者可以继续使用MySql(是的,这真的是后面的痛苦),因为这个决定是我无法控制的。

    所有我被告知的是使用doctrine的方法来实现这一点,因此一旦迁移到任何一个学说支持的平台,db将在未来变得可扩展。我知道这很荒谬。但是,是否真的可以使用数据库中的纬度和经度值来查询地理位置数据?

    此致

    Ashok Srinivasan

1 个答案:

答案 0 :(得分:0)

DQL仅提供following functions

  • ABS
  • CONCAT
  • CURRENT_DATE()
  • CURRENT_TIME()
  • CURRENT_TIMESTAMP()
  • LENGTH(STR)
  • LOCATE(needle,haystack [,offset])
  • LOWER(STR)
  • MOD(a,b)
  • SIZE(集合)
  • SQRT(Q)
  • SUBSTRING(str,start [,length])
  • UPPER(STR)
  • DATE_ADD(日期,天数,单位)
  • DATE_SUB(日期,天,单位)
  • DATE_DIFF(date1,date2)

但是,您可以创建自己的函数(例如弧度)Adding your own functions to the DQL language