如何搜索附近的地方,给出一对纬度,经度使用谷歌地图apis

时间:2011-11-01 04:09:50

标签: google-maps geolocation

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

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。位置)。拥有他的纬度,经度,地址,城市和国家,我有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,但如果任何其他组合更快,我可以更改技术堆栈。 (也就此提出建议)

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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