我想把这个放在桌子上

select ST_Distance (
    select location from utenti where user_id=464,
    select location from utenti where user_id=474604
);

具有这种类型的位置列location geography(POINT, 4326)
我得到一个语法错误,我不明白为什么。
我怎样才能达到我的目标?
例如,如果我为每个用户在两个查询中选择该列,则会得到如下数据
“0101000020E61000001435F98F528125402AE5B512BAA34540”
跑步:
select ST_Distance(%s, %s);

它起作用,但距离似乎不是真的。嗯

最佳答案

正如上面注释中指出的,您可以将查询重写为:

SELECT ST_Distance(a.geom, b.geom) FROM utenti a, utenti b WHERE a.user_id=464 AND b.user_id=474604;

但这将给你以度为单位的距离(因为这是你的点被存储为的)。因此,您需要将函数更改为:
SELECT ST_Distance_Sphere(a.geom, b.geom) FROM utenti a, utenti b WHERE a.user_id=464 AND b.user_id=474604;

ST_Distance_sphere将考虑地球的一些曲率,并返回以米为单位的距离。如果你需要绝对的精度并且不担心速度,你可以使用st_distance_spheroid来解释地球的所有曲率。

关于postgresql - postgis:两个地理区域之间的ST_Distance。语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55443848/

10-12 22:23