0

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

通常,在列出事件时,我们会说出它是针对哪些分支机构并建立关系的,我们会在附近的商店中搜索事件。抓住它们并按距离排序。

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

但我想知道如何将两者结合起来,所以我们的一个应用程序可以访问我们的 API,“伙计,我现在在哪里附近有 10 个事件?”并且 api 会拉出 10 个事件的列表最近的事件。

它应该能够处理使用分支位置以及拥有自己独特位置的事件。

或者你认为我应该将位置存储为它自己的实体还​​是隐藏分支,我们可以将这些位置设置为事件发生的地方,但实际上并不显示为应用程序中的一个分支:)

4

2 回答 2

1

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

如果您愿意使用多毛查询,MySQL 可以做到这一点。谷歌地图团队的这篇笔记给出了查询。您不必使用 Google 地图来执行此操作;您只需要涉及每个地方的纬度/经度信息。

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

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

看看这个: 来自城市表的地理位置距离 SQL

于 2013-06-26T11:36:53.123 回答
1

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

不确定这是您需要的,但这可能值得调查。

于 2013-06-26T11:43:12.630 回答