mysql - 按到达某个点的旅行时间标记数据
问题描述
在工作中,我的任务是找到一种方法,通过大致的旅行时间来标记我们的数据。
我们的网站是一个用户可以放置房地产广告的地方,用于出租/出售。
所以每个广告实体都有纬度、经度、关于广告的一些信息等等。
例如,我们想要标记靠近大学、高速公路入口点、大海、学校的广告,我们将这些称为兴趣点 (POI)。
我们的网站上有大约 800k 个广告,每天大约有 1k 个新广告。
为了获得旅行时间,我们可以使用 Open Trip Planner 创建一个兴趣点的等时线,然后我们返回多边形,例如乘坐公共交通工具 15 分钟路程的位置。
因此,可以检查哪些广告位于这些多边形内,并将它们标记为靠近 POI。但是我们可以有 10k 个 POI(每个学校、幼儿园等 1 个),对于每个等时线查询,您至少会得到 10 多个多边形,这仅用于公共交通,我们将需要一个用于其他类型的旅行(步行,汽车,自行车),假设是 4,从 OTP 生成每个等时查询大约需要 500 毫秒。
如您所见,数字越来越大,而且我们很难找到最佳解决方案,而且我们认为也许有比使用 OTP 获得大致旅行时间更好的解决方案。
此外,我们还有该国家/地区每个地址的纬度和经度,大约有 750k 个条目,因此可以改为标记地址,然后将每个广告指向一个地址。
所以我有两个问题
您会使用 OTP 来完成这项任务,还是您知道针对此类问题的开箱即用的解决方案?
考虑到当前提到的问题,您将如何设计数据库以及标记数据的最佳算法是什么?
最终结果将是能够向用户显示诸如“此属性距离大海 10 分钟步行路程”之类的内容。
解决方案
大概您的应用程序的兴趣点不会像您的列表那样经常变化。
因此,您可以利用 MySQL 中的地理空间扩展来构建等时表。
每个兴趣点在表中可能有四行,每行用于 5、10、15 和 20 分钟的步行。每行中的等时线本身可以表示为一个 POLYGON 对象。
每当您添加新的 POI 或流量模式发生变化时,您将不经常使用 OTP 信息填充这些行。
然后,当您添加新列表时,您可以使用该表查找附近的 POI 和行程时间。
如果使用 OTP 的成本不太高,您可以在每次添加新列表时简单地使用它。这样你就可以避免制作等时表。
如果您创建了正确的索引,那么这种应用程序完全在您的 DBMS 的能力范围内。
请务必使用最新版本的 dbms。并且调查一下 postgreSQL:它的地理空间特性比 MySQL 的更成熟。
推荐阅读
- sql - 在单个语句中从多个表中删除行
- swift - 将 NSCompoundPredicate 与列表一起使用
- python - python 3.8中的导入错误:没有名为'_abc'的模块
- python - ValueError:x 和 y 必须具有相同的第一维,但具有形状 (6,) 和 (3,)
- build - 避免“方便的符号链接”并直接输出到工作区
- ios - iOS Charts Library - x轴值全部合并,怎么能单独显示,不缩放
- tcl - Tcl:容忍命令执行中的换行符
- auth0 - 是否可以恢复 Auth0 电子邮件模板?
- javascript - 响应警报在 jquery、ajax 中不起作用
- angular - 设置“优化”时无法在 chrome 开发工具中调试:在 angular.json 中为真