按位置搜索(企业)数据库
Posted
技术标签:
【中文标题】按位置搜索(企业)数据库【英文标题】:Search DB (of businesses) by location 【发布时间】:2010-11-03 18:09:59 【问题描述】:我正在设计一个 mysql 数据库和一个相应的 RoR 应用程序,它将容纳各种业务,每个业务都有一个地址。
此应用程序的一项要求是按城市/国家/地区搜索数据库(这将包含欧洲/英国的企业)。搜索结果将由该国家/地区最近的城市返回。
这是一个粗略的 ERD:
组织数据库的最佳方式是什么?我应该将城市字段移到自己的表中吗?我应该为每个商家存储 GPS 坐标吗?
谢谢!
【问题讨论】:
你所拥有的似乎很正常。如果您想根据距离定位商家,则需要坐标。 是仅限于用户自己国家的搜索,例如我住在伦敦,搜索一家奶酪公司,您的系统建议一家距离公司只有 30 英里,但它在法国的海峡对面!真的对我没有多大好处,因为我讨厌旅行 - 或者那会是你系统中的有效命中? @f00 感谢您的洞察力,我们计划将其限制在国家/地区。因此,如果您在英国进行搜索,它只会返回附近的结果。 好,那你可能想看看我的解决方案***.com/questions/3983325/… 【参考方案1】:我会将城市存储在一个单独的表格中,其中包含市政厅(或市中心)的纬度/经度。然后对于每家商店,我都会存储纬度/经度。
这将允许您计算从商店到市中心的距离,并按距离排名,这样您就可以显示前 N 个。
如果您稍后存储用户的位置,那么很容易修改您的查询以显示与用户位置的距离。
【讨论】:
【参考方案2】:您不需要从Businesses
表链接到countryID
,因为PostalCodes
表已经具有Countries
表的FK。
【讨论】:
【参考方案3】:我认为拥有国家和邮政编码是矫枉过正,不会打扰。在您的国家/地区表中,包含地址、城市、州、邮政编码、国家/地区、纬度和 lng。
如果您的地址在 before_save 之前更新,则使用 GeoKit 将您的地址地理编码为 Lat/Lng。
然后你可以很厉害,说出类似(查找此地址 10 英里范围内的所有商家)之类的话
Business.within.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)
资源:
Geokit Gem Geokit Rails Plugin【讨论】:
以上是关于按位置搜索(企业)数据库的主要内容,如果未能解决你的问题,请参考以下文章