在我的项目中,我们有一个名为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编写的对象映射器。
答案 0 :(得分:1)
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'