【问题标题】:Multi-location entity query solution with geographic distance calculation具有地理距离计算的多地点实体查询解决方案
【发布时间】:2025-12-13 16:45:02
【问题描述】:

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

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

喜欢

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

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

我的尝试

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

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

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

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

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

【问题讨论】:

  • 看看 openstreetmap.org 他们使用 postgres (PostGIS) 并且 mssql 端口也可用。 wiki.openstreetmap.org/wiki/Main_Page我们为没有地图点许可证的客户使用它。
  • 我不需要地图,我需要搜索用户提供的数据。 postgis 是否支持多位置实体?

标签: database geospatial


【解决方案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'

【讨论】: