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

问题描述 投票:1回答:2

我想在我的桌子上运行它

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

postgresql gis postgis
2个回答
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来解释地球的所有曲率。


0
投票

若多边形到点距离选择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
© www.soinside.com 2019 - 2024. All rights reserved.