我正在尝试在我的桌子上运行
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);
它可以工作,但距离似乎不正确。嗯
答案 0 :(得分:2)
如上面评论中所指出的,您可以将查询重写为:
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来考虑地球的所有曲率。
答案 1 :(得分:0)
确定多边形到点的距离 选择st_distance( st_geomfromtext('POINT(0 0)'), st_geomfromtext('POLYGON((1 1,2 1,2 2,1 2,1 1))') )
相同的基础空间几何列
select st_distance(
st_geomfromtext(c.geom),
st_geomfromtext(b.geom)
) from city c , build b where b.c_ID=c.ID