0

在我的项目中,我们有一个名为 Trip 的实体。这次旅行有两点:起点和终点。开始和结束是带有一些附加属性的地理坐标,例如地址 atc。

我需要的是查询满足开始和结束搜索条件的所有行程。

喜欢

select from trips where start near 16,16 and finish near 18,20 where type = type

所以我的问题是:哪个数据库可以提供这样的功能?

我试过的

我探索了支持地理索引但不支持此用例的 mongodb。当前的解决方案将这些点存储为单独的文档,这些文档具有对旅行的引用。我们对开始和结束运行两个单独的查询,然后提取其相关行程的 ID,然后选择在开始和结束中都找到的行程 ID,最后返回行程集合。

在一个小样本上它工作得很好,但在一个更大的样本上它会变慢,就像用我的右手挠我的左耳一样。

所以我正在寻找更好的解决方案。

我知道 neo4j 及其空间插件,但我什至无法让它在 Windows 上运行。它会支持我们的用例吗?

还是有更好的解决方案?最好使用用 php 编写的对象映射器。

4

1 回答 1

1

就像 edze 已经说过 Postgres (PostGIS) 或 SQLite(SpatiaLite) 是你要找的

SELECT
  *
FROM
  trips 
WHERE
  ST_Distance(ST_StartPoint(way), ST_GeomFromText('POINT(16 16)',4326) < 5
  AND ST_Distance(ST_EndPoint(way), ST_GeomFromText('POINT(18 20)',4326) < 5
  AND type = 'type'
于 2012-08-30T14:49:59.973 回答