首页 > 解决方案 > 按到达某个点的旅行时间标记数据

问题描述

在工作中,我的任务是找到一种方法,通过大致的旅行时间来标记我们的数据。

我们的网站是一个用户可以放置房地产广告的地方,用于出租/出售。

所以每个广告实体都有纬度、经度、关于广告的一些信息等等。

例如,我们想要标记靠近大学、高速公路入口点、大海、学校的广告,我们将这些称为兴趣点 (POI)。

我们的网站上有大约 800k 个广告,每天大约有 1k 个新广告。

为了获得旅行时间,我们可以使用 Open Trip Planner 创建一个兴趣点的等时线,然后我们返回多边形,例如乘坐公共交通工具 15 分钟路程的位置。

因此,可以检查哪些广告位于这些多边形内,并将它们标记为靠近 POI。但是我们可以有 10k 个 POI(每个学校、幼儿园等 1 个),对于每个等时线查询,您至少会得到 10 多个多边形,这仅用于公共交通,我们将需要一个用于其他类型的旅行(步行,汽车,自行车),假设是 4,从 OTP 生成每个等时查询大约需要 500 毫秒。

如您所见,数字越来越大,而且我们很难找到最佳解决方案,而且我们认为也许有比使用 OTP 获得大致旅行时间更好的解决方案。

此外,我们还有该国家/地区每个地址的纬度和经度,大约有 750k 个条目,因此可以改为标记地址,然后将每个广告指向一个地址。

所以我有两个问题

  1. 您会使用 OTP 来完成这项任务,还是您知道针对此类问题的开箱即用的解决方案?

  2. 考虑到当前提到的问题,您将如何设计数据库以及标记数据的最佳算法是什么?

最终结果将是能够向用户显示诸如“此属性距离大海 10 分钟步行路程”之类的内容。

标签: mysqlalgorithmdata-structuresdata-analysis

解决方案


大概您的应用程序的兴趣点不会像您的列表那样经常变化。

因此,您可以利用 MySQL 中的地理空间扩展来构建等时表。

每个兴趣点在表中可能有四行,每行用于 5、10、15 和 20 分钟的步行。每行中的等时线本身可以表示为一个 POLYGON 对象。

每当您添加新的 POI 或流量模式发生变化时,您将不经常使用 OTP 信息填充这些行。

然后,当您添加新列表时,您可以使用该表查找附近的 POI 和行程时间。

如果使用 OTP 的成本不太高,您可以在每次添加新列表时简单地使用它。这样你就可以避免制作等时表。

如果您创建了正确的索引,那么这种应用程序完全在您的 DBMS 的能力范围内。

请务必使用最新版本的 dbms。并且调查一下 postgreSQL:它的地理空间特性比 MySQL 的更成熟。


推荐阅读