路由匹配的数据库解决方案

时间:2012-11-18 15:16:13

标签: database gis geospatial

我正在开发一个应用程序,让用户可以搜索从A点到B点的旅行。 它需要解决以下用例:

  1. 找到从A点到B点的旅程
  2. 找到从其他地方开始的旅程,但是从A点到B点
  3. 我现在正在寻找最适合支持此类用例的数据库解决方案。

    目前我们正在使用MongoDB。但是我必须弄清楚第一个用例的解决方法,并且我觉得用它来解决第二个用例是不可能的。

    在我看来,支持空间特征的所有可用的noSql dbs只允许文档,节点等上的一个地理空间索引。这对于从这一点向我展示半径5公里范围内的所有商店等查询都很好。

    所以我正在寻找一种可以解决这两种用例的解决方案。有没有这样的东西?

3 个答案:

答案 0 :(得分:1)

确实可以使用pgRouting。首先是解决方案,当第一个用户进入纽约和哥伦布作为他旅行的来源和目的地时,执行路线查询并将路径存储为PostGIS线串几何。

当第二个用户进入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库的一部分。以下是您可能使用的分析示例。

https://gis.stackexchange.com/questions/7699/for-a-given-feature-find-the-closest-point-along-a-given-path

答案 2 :(得分:0)

postgresql与postgis和pgrouting。你什么都不需要。