我想在我的桌子上运行它
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);
它有效,但距离似乎并非如此。 HM
正如上面的评论中所指出的,您可以将查询重写为:
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来解释地球的所有曲率。
若多边形到点距离选择st_distance(st_geomfromtext('POINT(0 0)'),st_geomfromtext('POLYGON((1 1,2 1,2 2,2 1,2 1))'))
相同的基本空间几何列
select st_distance(
st_geomfromtext(c.geom),
st_geomfromtext(b.geom)
) from city c , build b where b.c_ID=c.ID