postgis:两个地理区域之间的ST_Distance。语法错误

时间:2019-03-31 18:02:18

标签: postgresql gis postgis

我正在尝试在我的桌子上运行

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);

它可以工作,但距离似乎不正确。嗯

2 个答案:

答案 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