【问题标题】:How to search nearby places, given a pair of latitude, longitude using google maps apis如何使用谷歌地图api搜索附近的地方,给定一对纬度,经度
【发布时间】:2011-11-01 04:09:49
【问题描述】:

我有一个简单的需求:显示附近的地方,按照与当前用户的距离升序排列。

places 表是:

CREATE TABLE places (
 id int(11) NOT NULL ,
 category varchar(200) ,
 name varchar(200) ,
 address varchar(2000) ,
 city varchar(100) ,
 state varchar(100) ,
 zipcode varchar(20) ,
 country varchar(100) ,
 latitude decimal(12,9) ,
 longitude decimal(12,9) ,
 phone varchar(200) ,
 PRIMARY KEY (id)
)

我请求用户允许浏览器访问他的位置(或使用 ip 查找 appox.location)。有了他的纬度、经度、地址、城市和国家,我有 2 个选项可以找到附近的地方:

1) 计算 lat、lng 的最小、最大范围,例如距离用户坐标 5-10 英里的半径。然后做一个:

SELECT * FROM places  
    WHERE (latitude  between MINLAT  and MAXLAT )  
    and   (longitude between MINLNG and MAXLNG) 
    and category = CATEGORY

这可能意味着我的服务器将注定要完成所有计算。另一个问题是我无法根据与用户的实际距离对结果进行排序。

2) 另一个选项是选择与用户所在城市相同的所有地点。然后,在客户端,使用geo api的javascript函数计算用户与每个地方之间的距离,并以升序显示。缺点是服务器需要将城市中的所有places 发送给客户端(可能介于 .1k - 10k 之间)

考虑到所有权衡,哪个是最佳选择?还有其他选择吗?

计划使用 LAMP,但如果任何其他组合更快,我可以更改技术堆栈。 (也建议这样做)

【问题讨论】:

  • 嗨,亲爱的 Jerrymouse - 非常感谢这个有趣的线程与这种方法。这看起来相当令人印象深刻。你有这个解决方案吗?期待收到您的来信 - 问候

标签: google-maps geolocation


【解决方案1】:
【解决方案2】:

我想说在服务器端尽可能多地做。我不确定您为什么认为该查询“意味着我的服务器将注定要进行所有计算”。另外我认为您也可以进行排序;您只需要根据与用户的实际距离在查询中添加一个临时列。我不知道公式,但我认为它在 SQL 中是可行的。

【讨论】:

  • 如果每个用户请求的所有计算都在服务器端完成,服务器负载将呈指数级增长。我想将距离计算和排序部分委托给客户端,以节省服务器资源
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2016-05-21
相关资源
最近更新 更多