0

我们目前有一个可以按位置搜索对象的站点。我们有一个搜索框和我们国家的州下拉列表。每个对象都与一个状态有关系。

我们希望将此网站扩展到其他国家。我们的选择似乎是:

1/ 对于我们想要进入的每个国家,我们需要一份州列表,可能还需要邮政编码。这些对象与州和邮政编码相关联,并且在搜索框旁边提供了一个下拉列表。

2/ 将经度和纬度关联到每个对象,并让 google api 返回用户在搜索时键入的地址的经度和纬度。然后找到落在搜索地址的经/纬度一定半径内的对象。

选项 1 会表现良好但受到限制,因为在进入每个国家之前我们必须做很多工作(获取州/邮政编码列表)。

选项 2 似乎是最有弹性的,进入一个新国家没有限制。但是,如果做得不好,它可能会表现不佳。您将如何避免搜索表中的所有对象以找出其中 long/lat 落在搜索地址的 long/lat 的半径范围内?

我们喜欢 www.skillpages.com 的工作方式。非常快速和准确的搜索,如果我们选择选项 2,这是我们想要复制的内容。

任何关于如何最好地创建基于精确和弹性位置的搜索算法的建议将不胜感激。

4

2 回答 2

0

如果您希望允许用户搜索 x 英里半径内的项目,选项 2 听起来是最佳选择。如果您设置存储每个项目的 lat/lng 的索引列,则不应该有太多的数据库开销

假设基于 PHP/MySQL 的内容如下:

$radius = 0.15; // Would be calculated based on radius of the search
$user_lat = -0.134239; // Latitude of User Searching
$user_lon = 51.510238; // Longitude of User Searching

$query = mysql_query("SELECT * FROM `items` WHERE `lng`<'". ($user_lon + $radius) ."' AND `lng`>'". ($user_lon - $radius) ."' AND `lat`>'". ($user_lat - $radius) ."' AND `lat`<'". ($user_lat + $radius) ."'");
于 2012-07-25T23:04:55.557 回答
0

考虑将国家划分为地区、次地区、城市、地方。尽可能多的级别。不是实时运行 api 请求,而是存储城市中不同地区之间的距离(例如,一个城市有 100 个地区,这将导致一个城市的 100 X100 地区矩阵/表)。

根据用户输入的相应位置显示结果,所有结果都在一个城市中,可能按用户所在位置与所有其他位置之间的距离排序。有点像将市中心更改为用户的位置。

但是,这将导致城市的单独“位置表”,如果您超出某些城市数量,我只能推测会出现的问题。

我正在尝试为我的网站做同样的事情。

考虑是否将距离数据存储在 XML 或位图(这些在社交网络网站上创建社交图时被大量使用)会节省性能。

根据用户数量,实时调用 api + 计算距离应该会花费大量时间。无论如何,谷歌 api 调用也是有限的。

于 2012-08-03T17:43:46.783 回答