【问题标题】:Geolocation queries in Doctrine2Doctrine2 中的地理位置查询
【发布时间】:2014-08-29 09:08:56
【问题描述】:

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

  1. 姓名
  2. 纬度
  3. 经度
  4. 已创建(时间戳)

我看到通过 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;

现在我发现使用创建查询生成器很难做到这一点。我不确定 DQL 或 querybuilder 是否支持三角函数。我的数据库也有可能被迁移到 postgre 或者可以继续使用 MySql(是的,这真的很痛苦),因为这个决定是我无法控制的。

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

问候,

阿肖克·斯里尼瓦桑

【问题讨论】:

  • 学说的link 清楚地表明数据库平台是不能随时改变的。作为一名开发人员,这对我来说是一个好消息。但是我仍然无法找到一个体面的教程来实现 DQL 语言的三角函数。任何帮助,将不胜感激!问候, Ashok Srinivasan

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


【解决方案1】:

DQL 只提供following functions:

  • ABS
  • CONCAT
  • CURRENT_DATE()
  • CURRENT_TIME()
  • CURRENT_TIMESTAMP()
  • 长度(str)
  • LOCATE(needle, haystack [, offset])
  • LOWER(str)
  • MOD(a, b)
  • 大小(集合)
  • SQRT(q)
  • SUBSTRING(str, start [, length])
  • UPPER(str)
  • DATE_ADD(日期、天、单位)
  • DATE_SUB(日期、天数、单位)
  • DATE_DIFF(date1, date2)

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

【讨论】:

猜你喜欢
  • 2018-09-28
  • 2013-05-27
  • 2014-07-02
  • 2014-01-18
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多