我们目前有一个网站,可以按位置搜索对象。我们有一个搜索框和我们国家的州下拉列表。每个对象与一个状态有关系。
我们希望将此网站扩展到其他国家/地区。我们的选择似乎是:
1 /对于我们想要进入的每个国家/地区,我们需要一份州名单和可能的邮政编码。对象与状态和邮政编码相关联,并在搜索框旁边提供下拉列表。
2 /将经度和纬度与每个对象相关联,并让google api返回用户搜索时键入的地址的经度和纬度。然后找到落在搜索地址的长/纬度的某个半径范围内的对象。
选项1表现不错但有限,因为我们在进入每个国家之前必须做很多工作(获取州/邮政编码列表)。
选项2似乎是最有弹性的,进入一个新国家没有限制。但是,如果做得不好,它可能表现不佳。你如何避免搜索表格中的所有对象以找出那些长/纬度落在搜索地址的长/纬度的半径?
我们喜欢www.skillpages.com的运作方式。非常快速和准确的搜索,如果我们选择选项2,这是我们想要复制的内容。
非常感谢任何关于如何最好地创建基于搜索算法的准确和弹性位置的建议。
答案 0 :(得分: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) ."'");
答案 1 :(得分:0)
考虑将国家划分为地区,次地区,城市,地区。尽可能多的水平。不是实时运行api请求,而是存储城市中各地的距离(比如一个城市有100个地方,这将导致一个城市的100 X100地点矩阵/表)。
根据用户输入的位置显示相应的结果,所有结果都可能在城市中按照用户所在地与所有其他地点之间的距离进行排序。有点像将市中心改为用户的位置。
然而,这将导致城市的个人“位置表”,如果你超越一些城市,我只能推测可能会出现的问题。
我正在尝试为我的网站做同样的事情。
考虑将距离数据存储在XML或位图(这些用于在社交网络网站上创建社交图谱很多)将节省性能。
根据用户数量,实时调用api +计算距离应花费大量时间。无论如何谷歌API呼叫也是有限的。