具有地理距离计算的多位置实体查询解决方案

时间:2012-08-30 12:44:04

标签: database geospatial

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

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

喜欢

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

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

我尝试了什么

我已经探索过mongodb,它支持地理索引,但不支持这个用例。当前解决方案将这些点存储为单独的文档,这些文档引用了Trip。我们为启动和结束运行两个单独的问题,然后提取其相关行程的ID,然后选择在开始和结束时找到的行程ID,最后返回一组行程。

在一个小样本上它可以正常工作但是收集较大它会变慢,就像用右手抓我的左耳一样。

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

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

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

1 个答案:

答案 0 :(得分: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'