我正在开发一个应用程序,让用户可以搜索从A点到B点的旅行。 它需要解决以下用例:
我现在正在寻找最适合支持此类用例的数据库解决方案。
目前我们正在使用MongoDB。但是我必须弄清楚第一个用例的解决方法,并且我觉得用它来解决第二个用例是不可能的。
在我看来,支持空间特征的所有可用的noSql dbs只允许文档,节点等上的一个地理空间索引。这对于从这一点向我展示半径5公里范围内的所有商店等查询都很好。
所以我正在寻找一种可以解决这两种用例的解决方案。有没有这样的东西?
答案 0 :(得分:1)
当第二个用户进入From:Pittsburgh To:Columbus进入搜索表单,将城市名称地理编码到位置并进行PostGIS查询时,这些点(或城市边界)距离第一个用户的路径路径有多远。如果它们足够近并且第一个用户在合适的方向上行驶,他们就可以共享汽车。
第二个想法:在第一个用户输入旅行详细信息后,执行路由查询并将所有通过路由传递的地名存储到数据库中。
使用Postgres + PostGIS + pgRouting可以轻松实现这两种解决方案。 pgRouting的最大缺点是速度低(可以通过减少路由图中的数据来提高性能;路由速度不是那么重要等)。也可以将道路数据导出到外部文件;使用一些高速路由引擎(如OSRM,MoNav等);并且,如有必要,将结果写回PostGIS。但这需要更多的努力。
答案 1 :(得分:1)
此外,如果您选择避开数据库路由(没有双关语),您可以使用GeoTools
图形化Java库。
http://docs.geotools.org/latest/userguide/extension/graph/index.html
以下是我自己制作的一些示例代码和数据,用于演示如何使用它。
http://usefulpracticalgeoblog.blogspot.ch/2012/09/geotools-routing.html
在空间数据格式方面非常灵活,可用于构建街道网络图,以及如何输出结果。
然后,要查找行程B的起点是否接近预先计算的行程A路线,您可以使用JTS (Java Topology Suite)
,它是GeoTools库的一部分。以下是您可能使用的分析示例。
答案 2 :(得分:0)
postgresql与postgis和pgrouting。你什么都不需要。