按距离排序,您认为我应该怎么做?

时间:2013-06-26 11:14:35

标签: mysql api database-design content-management-system

我的公司目前正在开展家庭活动的上市服务。在我们的CMS中,我们有两种类型的实体分支(我们列出的商店)和活动(特别优惠,场合等)。

通常在列出活动时,我们会说出它适用于哪些分支并创建关系,我们会在商店附近搜索活动。抓住它们并按距离对它们进行排序。

现在我们的客户希望能够列出一个没有与之相关的分支的一次性活动(例如他们在花园中心而不是他们的一家商店附近举办艺术节),我很容易我可以按距离对它进行排序。

但我想知道的是如何将两者结合起来,所以我们的一个应用程序可以转到我们的API,“Dude,我现在正在接近10个事件?”并且api会列出一个列表十个最接近的事件。

它应该能够处理使用Branches位置的事件以及具有自己唯一位置的事件。

或者您认为我应该将位置存储为自己的实体或者隐藏分支,我们可以将其设置为事件发生的位置,但实际上并未显示为应用中的分支:)< / p>

2 个答案:

答案 0 :(得分:1)

如果您的事件和分支有纬度/经度位置,您可以应用Haversine公式来计算近似距离,然后按递增距离排序。

如果你愿意使用毛茸茸的查询,那么MySQL可以做到这一点。 Google地图小组发来的这条说明提供了查询。您无需使用Google地图执行此操作;你只需要为每个地方提供纬度/经度信息。

https://developers.google.com/maps/articles/phpsqlsearch_v3

编辑如果计算多对地点之间的距离,这是非常慢的。快速进行此类操作的技巧是使用边界框(球面矩形)距离限制,并在您的纬度和经度上放置索引。

看看这个:Geolocation distance SQL from a cities table

答案 1 :(得分:1)

MYSQL支持“空间数据库”作为spacial extension这将允许您在列中使用“空间”数据类型,以及在它们上构建索引,并执行各种“空间分析”,如多边形交集。

不确定这是否是您所需要的,但这可能值得研究。