【问题标题】:Using views to find list of users nearby using location in arguments使用视图使用参数中的位置查找附近的用户列表
【发布时间】:2011-10-14 20:08:26
【问题描述】:

我正在使用 drupal 6.X 我正在通过视图和视图数据源模块创建一个 api 当我们在视图中定义参数时,我将在 url 末尾添加位置的纬度和经度,以便我可以按最近的优先顺序获取用户列表。

【问题讨论】:

  • 或者我应该做自定义模块开发吗??

标签: drupal geolocation drupal-views reverse


【解决方案1】:

我认为创建自定义模块会更容易。基本上你想根据你的经度和纬度运行Haversine formula

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;

这是来自http://code.google.com/apis/maps/articles/phpsqlsearch.html,并且这样做:

将找到距离 37, -122 坐标 25 英里半径范围内最近的 20 个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于 25 的行,按距离对整个查询进行排序,并将其限制为 20 个结果。要按公里而不是英里搜索,请将 3959 替换为 6371。

我已经用 MySQL 尝试过这个确切的论坛,它工作得很好,我什至有一个完全成熟的模块可以为它工作,但不幸的是它适用于 Drupal 7,并且完全依赖于实体系统,所以对你的情况没有帮助.

【讨论】:

  • 谢谢克莱夫...我没有标记表,但我有包含纬度和经度字段的位置表我在你的查询中只有表名,而不是选择 ID,我使用的是选择盖和通过数据库中某一行的确切纬度经度我仍然没有得到任何信息
  • 这是我使用的方法可能是编码函数存在问题 _term_search_user($lat, $lon){ $users[] = array(); $query = db_query("SELECT lid, ( 3959 * acos( cos( 弧度(37) ) * cos( 弧度( $lat ) ) * cos( 弧度( $lon )"+ " - 弧度(-122) ) + sin (弧度(37))* sin(弧度($lat))))作为距离“+“从位置距离lid] = $row->lid; } 返回 $users; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 2011-11-19
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多