2

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

  1. 查找从 A 点到 B 点的行程
  2. 查找从其他点开始但经过 A 点到 B 点的旅行

我现在正在寻找最适合支持此类用例的数据库解决方案。

现在我们使用的是 MongoDB。但是我必须为第一个用例找出一个解决方法,我有一种感觉,用它来解决第二个用例是不可能的。

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

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

4

3 回答 3

1

Also, if you choose to avoid the Database route (no pun intended), you could use GeoTools graphing Java library.

http://docs.geotools.org/latest/userguide/extension/graph/index.html

Here is some example code and data I produced myself to demonstrate how it can be used.

http://usefulpracticalgeoblog.blogspot.ch/2012/09/geotools-routing.html

It is pretty flexible in terms of the spatial data formats that can be used to build the street network graph, and how the results can be outputted.

Then to find if the starting point of trip B is close to the pre-calculated route for Trip A, you could use JTS (Java Topology Suite), which is part of the GeoTools library. Here is an example of the analysis you might use.

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

于 2012-11-26T14:27:26.667 回答
1

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

当第二个用户在搜索表单中输入 From: Pittsburgh To: Columbus 时,将城市名称地理编码到位置并进行 PostGIS 查询,这些点(或城市边界)距离第一个用户的路线路径有多远。如果他们足够近并且第一个用户沿着合适的方向行驶,他们可以共享汽车。

第二个想法:在第一个用户输入行程详情后,执行路线查询并将所有通过路线传递的地名存储到数据库中。

这两种解决方案都可以通过 Postgres+PostGIS+pgRouting 轻松实现。pgRouting 的最大缺点是速度低(可以通过减少路由图中的数据来提高性能;路由速度不是那么重要等)。也可以将道路数据导出到外部文件;使用一些高速路由引擎(如 OSRM、MoNav 等);如有必要,将结果写回 PostGIS。但这肯定需要更多的努力。

于 2012-11-19T19:17:42.160 回答
0

带有 postgis 和 pgrouting 的 Postgresql。你不需要别的。

于 2012-11-18T16:21:56.220 回答