gpt4 book ai didi

postgresql - 运算符不存在 : geography <-> geography

转载 作者:行者123 更新时间:2023-11-29 13:00:33 25 4
gpt4 key购买 nike

我有 postgresql 类型的列

geography(Point,4326)

然后我使用

向其中插入了一些行
POINT(LONG LAT)

该数据已成功插入,我可以毫无问题地检索它,现在我想使用以下查询获取到特定点的最近条目

SELECT "cafes".* FROM "cafes" ORDER BY "latlng" <-> (SELECT latlng FROM cafes WHERE id = '3') LIMIT 1

但是我收到以下错误

ERROR:  operator does not exist: geography <-> geography
LINE 1: ...es".* FROM "cafes" ORDER BY "latlng" <-> (SELEC...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

最佳答案

<-> “距离”运算符适用于 PostgreSQL 几何数据类型,不适用于 PostGIS geography数据类型。随着geography您可以使用 PostGIS 函数的数据类型 ST_Distance()并找到最小值。

WITH this_cafe (latlng) AS (
SELECT latlng FROM cafes WHERE id = '3'
)
SELECT cafes.*, ST_Distance(cafes.latlng, this_cafe.latlng, 'false') AS dist
FROM cafes, this_cafe
ORDER BY dist ASC
LIMIT 1

注意第三个参数useSpheroid该函数设置为 false这将使功能更快。这不太可能影响结果,因为咖啡馆往往彼此靠近。

这假设只有 1 个咖啡厅有 id = 3 .如果可能有更多,则限制 CTE 仅返回 1 行。

关于postgresql - 运算符不存在 : geography <-> geography,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com