运算符不存在:地理 <-> 地理
operator does not exist: geography <-> geography
我有类型为
的 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.
<->
"distance between" 运算符适用于 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 限制为 return 仅 1 行。
我有类型为
的 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.
<->
"distance between" 运算符适用于 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 限制为 return 仅 1 行。