mysql - 为表中的每一行选择最近的点

标签 mysql geospatial openstreetmap

我用它来找到最近的点

SELECT 
  id, 
  ST_Distance(
   POINT(52.760667210533,-7.22646337599035),
   geo_point
  ) as distance 
from Points 
order by distance limit 1

我有一个临时表 TempPoints ,其中包含所有候选点,我想将它们规范化到 OSM 节点上,但数量很多,所以我需要一个查询来在一次调用中解决所有这些问题。 UNION 不会让我使用 order by,并且我的数据库原始查询接口(interface)不会让我只触发一系列由“;”分隔的查询。 临时表有纬度和经度,但也可以很容易地有一个点。我该怎么走

select id,NearestTo(TempPoint.geo_point,Points) from TempPoints;

编辑:我可以将大型联合查询中的每个选择括起来,这解决了我的问题。

我仍然希望能够加入最近的行。

最佳答案

这可能对你有用:

SELECT t.id as tid, p.id as pid, p.geo_point
FROM TempPoint t
JOIN Points p ON p.id = (
    SELECT p1.id
    FROM Points p1
    ORDER BY ST_Distance(p1.geo_point, t.geo_point)
    LIMIT 1
)

关于mysql - 为表中的每一行选择最近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50199153/

相关文章:

mysql - 合并计数结果加入laravel

MySQL Join 表,如果不满足条件仍然返回 null

sql-server-2008 - SQL Server 2008 地理 LineString 大小限制

python - 如何使用Python可视化空间数据

php - 如何计算两个地址之间的距离

PHP 访问系统 - OR 函数

php - 如何根据 MySQL 中的 ID 为用户的问题提供一个 URL,以便将来可以访问它?

database - PostgreSQL : Is this because of locks(row level)?

android - OSM - 使用自定义图标显示当前位置

javascript - 如何使用 JavaScript 中的 OpenStreetMap XML 管理全矢量离线 map ?